我在nodejs中使用api路由使用mongoose将用户添加到数据库。标准的东西。但是,它与一个用户完美配合。然后,当我尝试创建另一个用户时,新用户已登录但未保存到数据库。
感谢任何帮助。这是路线代码:
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 :(得分:2)
let
允许您声明范围有限的变量 使用它的块,语句或表达式。这与此不同var
关键字,它全局定义变量,或者本地定义变量 整个函数,无论块范围如何。
let newUser = new User();
将此更改为
var newUser = new User():
答案 1 :(得分:1)
原来这是mLab的一个问题。为了解决这个问题,我删除了用户集合并注册了一个新用户。再次生成用户集合后,我能够将新用户添加到数据库中。