MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Le middleware asynchrone Mongoose pre.save() ne fonctionne pas comme prévu

Vous utilisez une fonction de rappel de middleware parallèle (avec à la fois next et done ), mais vous ne définissez pas l'indicateur parallèle dans le schema.pre paramètres de sorte qu'il utilise les règles de série.

Donc, soit incluez le drapeau parallèle dans votre appel :

schema.pre("save", true, function(next, done) { ...

Ou passez à un style de rappel de middleware série si c'est tout ce dont vous avez besoin de toute façon :

schema.pre("save", function(next) {
    var self = this;

    model.findOne({email : this.email}, 'email', function(err, results) {
        if(err) {
            next(err);
        } else if(results) {
            console.warn('results', results);
            self.invalidate("email", "email must be unique");
            next(new Error("email must be unique"));
        } else {
            next();
        }
    });
});