Kontynuując od: Mongoose unique validation error typeMongoose pre.save() asynchroniczny middleware nie działa zgodnie z oczekiwaniami
Używam tego schematu z mongoose 3.0.3
z KMP:
var schema = new Schema({
_id: Schema.ObjectId,
email: {type: String, required: true, unique: true}
});
Dzięki tej warstwy pośredniej, aby uzyskać validationError od unikalny: true
schema.pre("save", function(next, done) {
var self = this;
model.findOne({email : this.email}, 'email', function(err, results) {
if(err) {
done(err);
} else if(results) {
console.warn('results', results);
self.invalidate("email", "email must be unique");
done(new Error("email must be unique"));
} else {
done();
}
});
next();
});
Jednak to nie działa!
Users.create()
nadal będzie zwracać numer MongoError: E11000 duplicate key error index
, a console.warn()
jest wywoływany tylko po tym.
Czynność składowania nie powinna być wywoływana, dopóki nie zostanie wywołane wszystkie oprogramowanie warstwy pośredniej done()
zgodnie z dokumentami, i powinienem otrzymać błąd sprawdzania poprawności.
Wygląda na to zachowanie done()
nie działa zgodnie z oczekiwaniami,
jakiś pomysł, dlaczego?
Jaka wersja Mongoose to się ma do ? Nie mogę znaleźć żadnych dokumentów dotyczących tego równoległego podpisu dla 'schema.pre', którego używasz w swoim fragmencie kodu. –
@PeterLyons Opcja równoległa została zwrócona przynajmniej do 2.x. Zobacz dokument http://mongoosejs.com/docs/middleware.html dla dokumentów. – JohnnyHK
@JohnnyHK czy mogę wysłać kod statusu w next()? Jeśli chcę odrzucić wniosek, to nie zapisać go w bazie danych i wysłać kod statusu? Czy to możliwe? – nirvair