MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O middleware assíncrono do Mongoose pre.save() não está funcionando conforme o esperado


Você está usando uma função de retorno de chamada de middleware paralela (com next e done ), mas você não está definindo o sinalizador paralelo no schema.pre parâmetros, então está usando as regras seriais.

Portanto, inclua o sinalizador paralelo em sua chamada:
schema.pre("save", true, function(next, done) { ...

Ou mude para um estilo de retorno de chamada de middleware serial se isso for tudo o que você precisa:
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();
        }
    });
});