在express生成的標(biāo)準(zhǔn)模板中,發(fā)生錯誤(404和其他錯誤)時,為什么會執(zhí)行以下代碼?當(dāng)使用try catch時,catch會觸發(fā)通用的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貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個贊
我們來看下文檔:
如果將任何項(xiàng)傳遞到 next() 函數(shù)(除了字符串 'route'),那么 Express 會將當(dāng)前請求視為處于錯誤狀態(tài),并跳過所有剩余的非錯誤處理路由和中間件函數(shù)。
因此示例代碼里調(diào)用 next(err)
將使得 Express 調(diào)用錯誤處理中間件。至于如何判斷一個中間件是不是錯誤處理中間件?

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個贊
Express 會對中間件 fn 的參數(shù)個數(shù)進(jìn)行判斷,如果參數(shù)個數(shù)不等于 4 則認(rèn)為不是錯誤處理中間件,則繼續(xù)調(diào)用next(err)
,這樣就會進(jìn)入到下一個中間件函數(shù),繼續(xù)進(jìn)行參數(shù)個數(shù)判斷,如此方式一直到某個中間件函數(shù)的參數(shù)個數(shù)是 4,就認(rèn)為找到了錯誤處理中間件,然后執(zhí)行此中間件函數(shù)。
另外,使用 try catch 會不會觸發(fā)錯誤處理中間件取決于你是否調(diào)用 next(err)
。
- 2 回答
- 0 關(guān)注
- 969 瀏覽
添加回答
舉報(bào)
0/150
提交
取消