से ऊपर के बाद की उम्मीद: मैं NPM से mongoose 3.0.3
के साथ इस स्कीमा का उपयोग कर रहा Mongoose unique validation error typeनेवला pre.save() async मिडलवेयर काम नहीं कर के रूप में
:
var schema = new Schema({
_id: Schema.ObjectId,
email: {type: String, required: true, unique: true}
});
इस मिडलवेयर के साथ से एक validationError पाने के लिए अद्वितीय: सही
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();
});
हालांकि, यह काम नहीं करता है!
Users.create()
अभी भी MongoError: E11000 duplicate key error index
और console.warn()
वापस लौटाएगा इसके बाद ही उसे कॉल किया जाएगा।
सहेजने की कार्रवाई तब तक नहीं की जानी चाहिए जब तक कि सभी मिडलवेयर done()
को दस्तावेज़ों के अनुसार बुलाया नहीं गया है, और मुझे एक सत्यापन त्रुटि वापस लेनी चाहिए।
ऐसा लगता है कि done()
व्यवहार की तरह अपेक्षित ढंग से काम नहीं कर रहा है,
किसी भी विचार क्यों?
नेवला किस संस्करण इस पर लागू होता है ? मुझे आपके कोड स्निपेट में उपयोग किए जा रहे 'schema.pre' के लिए इस समांतर हस्ताक्षर पर कोई दस्तावेज़ नहीं मिल रहा है। –
@ पीटर लियोन समानांतर विकल्प कम से कम 2.x के आसपास रहा है। दस्तावेज़ों के लिए http://mongoosejs.com/docs/middleware.html देखें। – JohnnyHK
@ जॉनीनीएचके क्या मैं अगले() में स्टेटस कोड भेज सकता हूं? अगर मैं अनुरोध को अस्वीकार करना चाहता हूं, तो डेटाबेस में अनुरोध सहेज नहीं है, और एक स्टेटस कोड भेजना है? क्या यह संभव है? – nirvair