sql >> Base de Datos >  >> NoSQL >> MongoDB

El middleware asíncrono pre.save () de Mongoose no funciona como se esperaba

Está utilizando una función de devolución de llamada de middleware paralelo (con next y done ), pero no está configurando el indicador paralelo en el schema.pre parámetros por lo que está utilizando las reglas de serie.

Así que incluye la bandera paralela en tu llamada:

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

O cambie a un estilo de devolución de llamada de middleware en serie si eso es todo lo que necesita de todos modos:

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