亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求問node express 捕獲錯誤的機制

求問node express 捕獲錯誤的機制

陪伴而非守候 2019-03-16 19:10:18
在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 調用錯誤處理中間件。至于如何判斷一個中間件是不是錯誤處理中間件?

查看完整回答
反對 回復 2019-03-16
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

Express 會對中間件 fn 的參數個數進行判斷,如果參數個數不等于 4 則認為不是錯誤處理中間件,則繼續調用next(err),這樣就會進入到下一個中間件函數,繼續進行參數個數判斷,如此方式一直到某個中間件函數的參數個數是 4,就認為找到了錯誤處理中間件,然后執行此中間件函數。

另外,使用 try catch 會不會觸發錯誤處理中間件取決于你是否調用 next(err)。


查看完整回答
反對 回復 2019-03-16
  • 2 回答
  • 0 關注
  • 976 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號