2017-09-13 78 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

相關問題