2017-09-13 10 views
0

新しいユーザーを登録するときに、電子メールの一意性をチェックする必要があります。ボディパーサーを使用してすべてのフィールドが空ではないことを確認していますが、入力メールが他の人によって使用されていないことを確認してすぐにユーザーのメッセージを出力するにはどうすればよいですか?私が前を使用する方法を発見し、同様の質問を見た後フィールドの一意性を検証する最良の方法Mangoose Node

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

技術スタックは、Node.jsの、マングース、ボディパーサーモジュール、MongoDBの

はここで、ルートファイルのさ私のモデルファイルに保存しますが、私は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

ありがとうございます!あなたは本当に助けてくれましたが、 'exports.register'の代わりに' router.post( '/ register'')を使うのは大丈夫ですか? – Nick

関連する問題