验证字段Mangoose Node

时间:2017-09-13 13:37:29

标签: node.js mongodb mongoose mean-stack

注册新用户时,我想查看电子邮件的唯一性。我正在使用正文解析器来确保所有字段都不为空,但我如何检查输入电子邮件是否被其他任何人使用并立即为用户输出消息?

技术堆栈是Node.js,mongoose,body-parser模块,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数组的一部分向用户显示(见上文)

任何帮助将受到高度赞赏!

1 个答案:

答案 0 :(得分: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);

这将确保电子邮件是唯一的。然后在register方法中执行以下操作:

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
              })
          });
        }
    });
  }
 }
}  

希望这有帮助。