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