在express生成的標準模板中,發生錯誤(404和其他錯誤)時,為什么會執行以下代碼?當使用try catch時,catch會觸發通用的error handler方法?// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404; next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
2 回答
紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
我們來看下文檔:
如果將任何項傳遞到 next() 函數(除了字符串 'route'),那么 Express 會將當前請求視為處于錯誤狀態,并跳過所有剩余的非錯誤處理路由和中間件函數。
因此示例代碼里調用 next(err) 將使得 Express 調用錯誤處理中間件。至于如何判斷一個中間件是不是錯誤處理中間件?
守著一只汪
TA貢獻1872條經驗 獲得超4個贊
Express 會對中間件 fn 的參數個數進行判斷,如果參數個數不等于 4 則認為不是錯誤處理中間件,則繼續調用next(err),這樣就會進入到下一個中間件函數,繼續進行參數個數判斷,如此方式一直到某個中間件函數的參數個數是 4,就認為找到了錯誤處理中間件,然后執行此中間件函數。
另外,使用 try catch 會不會觸發錯誤處理中間件取決于你是否調用 next(err)。
- 2 回答
- 0 關注
- 976 瀏覽
添加回答
舉報
0/150
提交
取消
