錯誤處理
此係列文章的應用示例已釋出於 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star.
Try-Catch
使用 async 方法意味著你可以 try-catch next
.
此示例為所有錯誤新增了一個 .status
:
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
err.status = err.statusCode || err.status || 500;
throw err;
}
});
預設錯誤處理程式
預設的錯誤處理程式本質上是中介軟體鏈開始時的一個 try-catch。要使用不同的錯誤處理程式,只需在中介軟體鏈的起始處放置另一個 try-catch,並在那裡處理錯誤。但是,預設錯誤處理程式對於大多數用例來說都是足夠好的。它將使用狀態程式碼 err.status
,或預設為500。如果 err.expose
是 true,那麼 err.message
就是答覆。否則,將使用從錯誤程式碼生成的訊息(例如,對於程式碼500,將使用訊息“內部伺服器錯誤”)。所有標頭將從請求中清除,但是任何在 err.headers
中的標頭將會被設定。你可以使用如上所述的 try-catch 來向此列表新增標頭。
以下是建立你自己的錯誤處理程式的示例:
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
// will only respond with JSON
ctx.status = err.statusCode || err.status || 500;
ctx.body = {
message: err.message
};
}
})
錯誤事件
錯誤事件偵聽器可以用 app.on(`error`)
指定。如果未指定錯誤偵聽器,則使用預設錯誤偵聽器。錯誤偵聽器接收所有中介軟體鏈返回的錯誤,如果一個錯誤被捕獲並且不再丟擲,它將不會被傳遞給錯誤偵聽器。如果沒有指定錯誤事件偵聽器,那麼將使用 app.onerror
,如果 error.expose
為 true 並且 app.silent
為 false,則簡單記錄錯誤。
如果這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: koa-docs-Zh-CN 支援, 謝謝.