MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose pre.save() asynchrone Middleware funktioniert nicht wie erwartet

Sie verwenden eine parallele Middleware-Callback-Funktion (mit sowohl next und done ), aber Sie setzen das Parallel-Flag nicht in schema.pre Parameter, so dass es die seriellen Regeln verwendet.

Fügen Sie also entweder das Parallel-Flag in Ihren Aufruf ein:

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

Oder wechseln Sie zu einem seriellen Middleware-Callback-Stil, wenn das sowieso alles ist, was Sie brauchen:

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