nodejs只能在数据库中创建一个用户

时间:2017-09-04 20:20:20

标签: node.js mongodb mongoose

我在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);

2 个答案:

答案 0 :(得分:2)

  

let允许您声明范围有限的变量   使用它的块,语句或表达式。这与此不同   var关键字,它全局定义变量,或者本地定义变量   整个函数,无论块范围如何。

let newUser = new User(); 

将此更改为

var newUser = new User():

答案 1 :(得分:1)

原来这是mLab的一个问题。为了解决这个问题,我删除了用户集合并注册了一个新用户。再次生成用户集合后,我能够将新用户添加到数据库中。