Koa v2.x 中文文件 錯誤處理

DemoPark發表於2019-02-16

錯誤處理

此係列文章的應用示例已釋出於 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 支援, 謝謝.

相關文章