express中的錯誤處理

2022-07-28 09:54:20 字數 2090 閱讀 4026

定義錯誤處理中介軟體和定義其他中介軟體一樣,除了需要 4 個引數,而不是 3 個,其格式如下(err, req, res, next)。例如:

console.error(err.stack);

res.status(500).send('something broke!');

});

var bodyparser = require('body-parser');

var methodoverride = require('method-override');

// 業務邏輯

});

中介軟體返回的響應是隨意的,可以響應乙個 html 錯誤頁面、一句簡單的話、乙個 json 字串,或者其他任何您想要的東西。

為了便於組織(更高階的框架),您可能會像定義常規中介軟體一樣,定義多個錯誤處理中介軟體。比如您想為使用 xhr 的請求定義乙個,還想為沒有使用的定義乙個,那麼:

var bodyparser = require('body-parser');

var methodoverride = require('method-override');

logerrors將請求和錯誤資訊寫入標準錯誤輸出、日誌或類似服務:

function logerrors(err, req, res, next) 

clienterrorhandler的定義如下(注意這裡將錯誤直接傳給了next):

function clienterrorhandler(err, req, res, next) );

} else

}

errorhandler能捕獲所有錯誤,其定義如下:

function errorhandler(err, req, res, next) );

}

如果向next()傳入引數(除了 『route』 字串),express 會認為當前請求有錯誤的輸出,因此跳過後續其他非錯誤處理和路由/中介軟體函式。如果需做特殊處理,需要建立新的錯誤處理路由,如下節所示。

function checkifpaidsubscriber(req, res, next)

}, function getpaidcontent(req, res, next) );

});next()next(err)類似於promise.resolve()promise.reject()。它們讓您可以向 express 發訊號,告訴它當前控制代碼執行結束並且處於什麼狀態。next(err)會跳過後續控制代碼,除了那些用來處理錯誤的控制代碼。

express 內建了乙個錯誤處理控制代碼,它可以捕獲應用中可能出現的任意錯誤。這個預設的錯誤處理中介軟體將被新增到中介軟體堆疊的底部。

如果你向next()傳遞了乙個 error ,而你並沒有在錯誤處理控制代碼中處理這個 error,express 內建的預設錯誤處理控制代碼就是最後兜底的。最後錯誤將被連同堆疊追蹤資訊一同反饋到客戶端。堆疊追蹤資訊並不會在生產環境中反饋到客戶端。

設定環境變數node_env為 「production」 就可以讓應用執行在生產環境模式下。

如果你已經開始向 response 輸出資料了,這時才呼叫next()並傳遞了乙個 error,比如你在將向客戶端輸出資料流時遇到乙個錯誤,express 內建的預設錯誤處理控制代碼將幫你關閉連線並告知 request 請求失敗。

因此,當你新增了乙個自定義的錯誤處理控制代碼後,如果已經向客戶端傳送包頭資訊了,你還可以將錯誤處理交給 express 內建的錯誤處理機制。

function errorhandler(err, req, res, next) 

res.status(500);

res.render('error', );

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

swift 中錯誤處理

enum customerror error 定義乙個測試用的類 class testerrorclass name s func showstring 第一種使用方式,執行 後,直接丟擲異常,中止執行 let tes trytesterrorclass s 執行結果 lldb expr 123.c...

SPEL 中的錯誤處理

spel 中的錯誤處理 專案 目的 onerr 使用onerr語句定義錯誤處理例程的位置。err 使用err檢索當前錯誤狀態的數量。在錯誤處理例程中使用這個可以確定已經發生了哪些錯誤。error 生成乙個可被錯誤處理程式捕獲的使用者定義的錯誤。era 使用era檢索發生錯誤的軸號。這通常用於錯誤處理...