nodejs只能够在数据库中创建一个用户
我正在使用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);
原来这是用MLAB的问题。为了修复它,我删除了用户集合并注册了一个新用户。在用户集合再次生成后,我可以将新用户添加到数据库。
以上的问题了!我真的在看一切,看看可能是什么问题。 Upvoted! – turmuka
@turmuka谢谢你,我非常感谢你的帮助! –
let
允许你声明了在范围上不限于所述 块,语句,或在其上使用的表达变量。这与 关键字var
不同,后者在全局范围内定义变量,或在本地定义整个函数,而与块范围无关。
let newUser = new User();
改变这
var newUser = new User():
这不适合我。 –
当你在'.save()'函数之前尝试'console.log' newUser时,它说了什么? @TerraNuva – turmuka
它像我想要的那样返回新的用户对象。所以我猜这是.save函数之后的问题? {_id:59add388e980f8190779d71a, 地方: {密码: '$ 2A $ 10 $ 4ofOQTjqT44lSOEMQO8nvuKKSu55u/KvEpvw4q4bZpiioPOF3NgBG', 名称: '测试', 电子邮件: '[email protected]'}} –
您是否在第二次和其他呼叫中使用了“{token:'token-value'}”的响应? – alexmac
@alexmac是的。我检查了每一次,新的令牌也总是有正确的负载。 –
尝试检查'newUser.save'回调中的'err'对象,可能是验证等错误。 – alexmac