2017-09-13 1 views
0

Lors de l'enregistrement d'un nouvel utilisateur, je souhaite vérifier son unicité. J'utilise l'analyseur de corps pour m'assurer que tous les champs ne sont pas vides, mais comment puis-je vérifier que l'e-mail d'entrée n'est pas utilisé par quelqu'un d'autre et envoyer immédiatement le message à un utilisateur?Meilleure façon de valider l'unicité d'un champ Mangoose Node

La pile technologique est Node.js, mangouste, le module corps-analyseur, MongoDB

Voici le fichier d'itinéraire:

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

Après avoir consulté des questions similaires, j'ai trouvé un moyen d'utiliser un pré enregistrer dans mon fichier de modèle, mais je ne sais pas comment afficher l'erreur à l'utilisateur dans le cadre du tableau errors (voir ci-dessus)

Toute aide sera grandement appréciée!

Répondre

0

Vous pouvez obtenir les deux à partir du modèle Mongoose et de la méthode Register().

Le modèle utilisateur doit ressembler à ceci:

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

Cela permettra d'assurer que les courriels sont uniques. Ensuite, à la méthode de registre, vous faites ceci:

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

Espérons que cela aide.

+0

Vous pouvez utiliser 'router.post ('/ register', fonction (req, res) { \t });' comme dans votre code ci-dessus au lieu de 'exports.register = function (req, res, suivant) {} ' – Sleek

+0

merci! Vous m'avez vraiment aidé, mais est-ce que ça va si j'utilise 'router.post ('/ register'') au lieu de' exports.register'? – Nick