2
比方說,我已經定義了以下中間件和路由處理程序:Express.js:從路由處理函數調用下一個(錯誤)是否調用全局錯誤處理中間件?
app.use(function(err,req,res,next) {
res.status(500).send('Something broke!');
});
app.get('/test',function(req,res) {
//some error happens here, and ther "error" object is defined
next(error);
});
Doe的錯誤處理中間件被調用?
如果不是,將錯誤處理中間件如果
- 錯誤處理中間件被下面的路由處理程序定義的叫什麼?我用
throw error;
代替next(error);
? - 以上兩者是否屬實?
或者我應該做這樣的事情:
//route.js
module.exports=function(req,res,next) {
//error happens here
next(error);
}
//errorHandler.js
module.exports=function(err,req,res,next) {
res.status(500).send('Something broke!');
}
//app.js
var route=require('route');
var errorHandler=require('erorHandler');
app.get('/test',[route,errorHandler]);
我現在有點糊塗了......
啊,所以未來(錯誤)將進入錯誤處理中間件,即使它沒有在路線中定義「下一個」是什麼? – Alex
對不起,這是一個錯誤,'next'必須在回調函數app.get('/ test',function(req,res,next)'否則會出錯'「next」不是函數' – Molda
''下一個(錯誤)''會用''req,res,next''簽名忽略中間件,並用'err,req,res,next''簽名直接進入下一個中間件? – Alex