यदि आप एक्सप्रेस का उपयोग कर रहे हैं, तो त्रुटियों को आम तौर पर सीधे आपके मार्ग में या मोंगोस के शीर्ष पर बने एपीआई के भीतर, next
के साथ त्रुटि को अग्रेषित करने के लिए सीधे किया जाता है।
app.get('/tickets', function (req, res, next) {
PlaneTickets.find({}, function (err, tickets) {
if (err) return next(err);
// or if no tickets are found maybe
if (0 === tickets.length) return next(new NotFoundError));
...
})
})
NotFoundError
अपने error handler middleware में सूंघा जा सकता है अनुकूलित संदेश सेवा प्रदान करने के लिए।
कुछ अमूर्तता संभव है लेकिन आपको मार्ग श्रृंखला के नीचे त्रुटि को पारित करने के लिए अभी भी next
विधि तक पहुंच की आवश्यकता होगी।
PlaneTickets.search(term, next, function (tickets) {
// i don't like this b/c it hides whats going on and changes the (err, result) callback convention of node
})
केंद्रीय रूप से मोंगोज़ त्रुटियों को संभालने के लिए, वास्तव में सभी को संभालने के लिए वास्तव में एक स्थान नहीं है। त्रुटियाँ कई विभिन्न स्तरों पर नियंत्रित किया जा सकता:
connection
त्रुटियों connection
अपने मॉडल पर उत्सर्जित होते हैं का उपयोग कर रहे हैं, इसलिए
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
ठेठ प्रश्नों के लिए/अद्यतन के लिए/निकालता है त्रुटि अपने कॉलबैक करने के लिए पारित कर दिया है।
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
आप एक कॉलबैक त्रुटि मॉडल पर उत्सर्जित होता है उत्तीर्ण नहीं होते हैं, तो आप इसके लिए सुन रहे हैं:
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
आप एक कॉलबैक उत्तीर्ण नहीं होते हैं और बात नहीं सुन रहे हैं model
स्तर पर त्रुटियां वे मॉडल connection
पर उत्सर्जित की जाएंगी।
यहां की कुंजी लेना यह है कि आप next
तक किसी भी तरह से त्रुटि को पारित करने के लिए उपयोग करना चाहते हैं।
धन्यवाद, आपका सहायक उत्तर मेरे लिए त्रुटि प्रबंधन के बारे में बहुत कुछ स्पष्ट करता है। – Sonson123
महान जवाब! विशेष रूप से ExpressJS की त्रुटि हैंडलिंग मिडलवेयर में टाई करने के लिए अगले() का उपयोग करने के बारे में सुझाव। –
यह mongoose.connection.on ('त्रुटि', हैंडलर) के साथ काम नहीं करता है; या conn.on ('त्रुटि', हैंडलर); मेरे लिए, मैंने हैंडलर को एक फ़ंक्शन के रूप में परिभाषित किया है जो console.log() पहला तर्क है लेकिन सर्वर कंसोल पर कुछ भी नहीं दिखाई देता है। – Vadorequest