2017-09-04 91 views
0

我正在使用nodejs中的api路由通过猫鼬将用户添加到数据库。标准的东西。但是,它可以与一个用户完美协作。然后,当我尝试创建另一个用户时,新用户已登录但未保存到数据库。nodejs只能够在数据库中创建一个用户

任何帮助表示赞赏。这里是路由代码:

app.get('/register' , function(req , res) { 
    res.sendFile(path.join(__dirname , '../public' , 'register.html')); 
}); 
app.post('/api/register' , function(req, res) { 
    User.findOne({'local.email': req.body.email}, function(err, user) { 
     if(err) { 
      return res.json({ 
       'message': err 
      }); 
     } 
     if(user) { 
      return res.json({ 
       'message': 'User already exists' 
      }); 
     } else { 
      let newUser = new User(); 

      newUser.local.email = req.body.email; 
      newUser.local.name = req.body.name; 
      newUser.local.password = newUser.setPassword(req.body.password); 

      newUser.save(function(err) { 
       var token; 
       token = newUser.generateJwt(); 
       res.status(200); 
       res.json({ 
        'token': token 
       }); 
      }); 
     } 
    }); 
}); 

架构:

const bcrypt = require('bcrypt-nodejs'); 
const jwt = require('jsonwebtoken'); 
const mongoose = require('mongoose'); 
let userSchema = new mongoose.Schema({ 
    local: { 
     email: String, 
     name: String, 
     password: String 
    } 
}); 
userSchema.methods.setPassword = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null); 
} 
userSchema.methods.validatePassword = function(password) { 
    return bcrypt.compareSync(password, this.local.password); 
} 
userSchema.methods.generateJwt = function() { 
    var expire = new Date(); 
    expire.setDate(expire.getDate() + 7); 

    return jwt.sign({ 
    _id: this._id, 
    email: this.local.email, 
    name: this.local.name, 
    exp: parseInt(expire.getTime()/1000), 
    }, process.env.CONFIG_SR); 
}; 
module.exports = mongoose.model('User' , userSchema); 
+0

您是否在第二次和其他呼叫中使用了“{token:'token-value'}”的响应? – alexmac

+0

@alexmac是的。我检查了每一次,新的令牌也总是有正确的负载。 –

+0

尝试检查'newUser.save'回调中的'err'对象,可能是验证等错误。 – alexmac

回答

1

原来这是用MLAB的问题。为了修复它,我删除了用户集合并注册了一个新用户。在用户集合再次生成后,我可以将新用户添加到数据库。

+1

以上的问题了!我真的在看一切,看看可能是什么问题。 Upvoted! – turmuka

+0

@turmuka谢谢你,我非常感谢你的帮助! –

2

let允许你声明了在范围上不限于所述 块,语句,或在其上使用的表达变量。这与 关键字var不同,后者在全局范围内定义变量,或在本地定义整个函数,而与块范围无关。

let newUser = new User(); 

改变这

var newUser = new User(): 
+0

这不适合我。 –

+0

当你在'.save()'函数之前尝试'console.log' newUser时,它说了什么? @TerraNuva – turmuka

+0

它像我想要的那样返回新的用户对象。所以我猜这是.save函数之后的问题? {_id:59add388e980f8190779d71a, 地方: {密码: '$ 2A $ 10 $ 4ofOQTjqT44lSOEMQO8nvuKKSu55u/KvEpvw4q4bZpiioPOF3NgBG', 名称: '测试', 电子邮件: '[email protected]'}} –

相关问题