2017-09-13 41 views
0

注册新用户时,我想检查电子邮件的唯一性。我正在使用body parser来确保所有字段都不是空的,但我如何检查输入电子邮件没有被其他人使用,并立即为用户输出消息?验证字段唯一性的最佳方法Mangoose节点

的技术堆栈的Node.js,猫鼬,身体解析器模块,MongoDB的

,路线如下文件:

router.post('/register', function(req, res){ 
    let name = req.body.name; 
    let email = req.body.email;  

    req.checkBody('name', 'Name field is empty!').notEmpty(); 
    req.checkBody('email', 'Email field is empty!').notEmpty(); 
    req.checkBody('email', 'Invalid email format').isEmail();  

    var errors = req.validationErrors(); 

    if(errors){ 
    res.render('register', { 
     errors:errors 
    }); 
    } else { 
    let newUser = new User({ 
     name: name, 
     email: email 
    }); 

通过类似的问题寻找后,我发现了一种使用预保存在我的模型文件中,但我不知道如何将错误显示给用户,作为errors阵列的一部分(参见上文)

任何帮助将不胜感激!

回答

0

您可以通过Mongoose模型和Register()方法实现这两种方法。

用户模型应该是这样的:

var mongoose = require('mongoose'); 

var UserSchema = new mongoose.Schema({ 
    email: { 
     type: String, 
     lowercase: true, 
     unique: true, 
     sparse: true 
    }, 

    password: { 
     type: String, 
     required: true 
    },  
}, 
{ 
    timestamps: true 
}); 


module.exports = mongoose.model('User', UserSchema); 

这将确保电子邮件是唯一的。然后在注册方法,你这样做:

exports.register = function(req, res, next){ 
    let name = req.body.name; 
    let email = req.body.email;  
    User.findOne({email: email}, function(err, existingUser){ 
     if(err){ 
      return res.status(500).json(err); 
     } 
     if(existingUser){       
     return res.status(422).json('Email address is already registered.');    
     } 
     else { 
      var user = new User({ 
       username : username, 
       email: email, 
       password: password 
      }); 

      user.save(function(err, user){ 
       if(err){ 
        return next(err); 
       } 
       var userInfo = setUserInfo(user); 
       res.status(201).json({ 
        token: 'JWT ' + generateToken(userInfo), 
        user: userInfo 
       }) 
      }); 
     } 
    }); 
    } 
} 
} 

希望这可以帮助。

+0

可以使用 'router.post( '/寄存器',函数(REQ,RES){ \t });'如在您的代码,而不是以上的'exports.register =函数(REQ,RES下一个){}' – Sleek

+0

谢谢!你真的帮了我,但是如果我使用'router.post('/ register''而不是'exports.register'? – Nick

相关问题