sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose pre.save() async middleware fungerar inte som förväntat

Du använder en parallell återuppringningsfunktion för middleware (med båda next). och done ), men du ställer inte in parallellflaggan i schema.pre parametrar så att den använder seriereglerna.

Så inkludera antingen parallellflaggan i ditt samtal:

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

Eller byt till en seriell middleware-återuppringningsstil om det ändå är allt du behöver:

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



  1. Spring Data MongoDB 4.0 transaktionsstöd

  2. Kryptera lösenordsfält i mongodb

  3. nodejs mongodb-drivrutinen avbryter anslutningen när den är inaktiv

  4. djupbefolkning i mangust