नहीं कहा जा रहा है, मैं अपने एक्सप्रेस ऐप के लिए त्रुटि प्रबंधन सेट करने और निम्न समस्या में चलने की कोशिश कर रहा हूं।एक्सप्रेस 3 त्रुटि मिडलवेयर को
मैं एक त्रुटि मिडलवेयर परिभाषित और पिछले मध्यस्थ के रूप में जोड़ें:
app.get('/datenschutz', function(req, res, next){
return next(new Error('Just testing')); // handle everything here
});
हालांकि मेरी मिडलवेयर कभी नहीं है:
// error handler
app.use(function(err, req, res, next) {
console.log('JUST TESTING. ERROR HANLDER HAS BEEN CALLED...');
next(err);
});
अब मैं जब भी कोई त्रुटि होती है उम्मीद करेंगे इस मिडलवेयर के नाम से जाना बुलाया! ब्राउज़र हालांकि स्टैक ट्रेस प्रदर्शित करता है। ऐसा लगता है कि एक और मिडलवेयर है जो इस त्रुटि को पकड़ रहा है और इसके बारे में कुछ भी करने से पहले इसे संसाधित कर रहा है।
// setup ssl for local testing
var
app = express();
app.
use(express.static(__dirname + '/public')).
use(express.bodyParser()).
use(express.cookieParser());
मेरी त्रुटि क्यों निपटने है मिडलवेयर नहीं बुलाया जा रहा है:
समस्या यह है कि मैं कोई सुराग नहीं है जहां इस मिडलवेयर में परिभाषित किया जा सकता है, जैसा कि मैंने एक बहुत ही सरल सेटअप है? यह 'डिफ़ॉल्ट' त्रुटि होल्डिंग कहां हो रही है?
धन्यवाद!
* संपादित करें * मुझे लगता है कि मिडलवेयर वास्तव में काम कर रहा है। हालांकि यह मामला है अगर मैं इसे किसी अन्य मिडलवेयर फ़ंक्शन से कॉल करता हूं। हालांकि अगर यह एक एक्सप्रेस मार्ग (GET, POST, आदि ..) के रूप में परिभाषित फ़ंक्शन के अंदर त्रुटि उत्पन्न होती है तो इसे लागू नहीं किया जा रहा है। यह बहुत अजीब है। अगर मैं मार्ग कॉलबैक यह तो काम करता है करने के लिए अपने त्रुटि मिडलवेयर जोड़ें:
app.get('/testError', function(req, res, next){
return next(new Error('Just testing')); // handle everything here
}, function(err,req,res,next) {
console.log('This error handler is called!!');
return next();
});
* संपादित करें 2 - पाया स्वीकार्य कारगर युक्तियाँ ** मैं इसे इस तरह से किया जा सकता है हैरान हूं। जैसा कि मैंने एक्सप्रेस में त्रुटि प्रबंधन के बारे में कई प्रविष्टियां/प्रश्न पढ़े थे और कभी भी इस संभावना का उल्लेख नहीं किया था। हालांकि ऐसा लगता है कि अगर रूट कॉलबैक के अंदर एक त्रुटि ocurrs नियमित त्रुटि मिडलवेयर हैंडलर इसे नहीं उठाएंगे। आपको रूट स्तर पर एक त्रुटि हैंडलर को परिभाषित करने की आवश्यकता होगी।
app.all('*', function(err,req,res,next) {
console.log('This is a global error handler at route level....');
return next(err);
});
क्या आपके पास 'app.use (app.router)' पहले त्रुटि हैंडलर 'app' पर सेट किया जाता है? – staackuser2
@emostar - नहीं। सभी मिडलवेयर ऊपर सूचीबद्ध है। – santiagoIT
ठीक है, फिर त्रुटि हैंडलर से पहले 'app.use (app.router)' जोड़ें;) – staackuser2