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

錯誤處理

此係列文章的應用示例已發佈於 GitHub: koa-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.git

Try-Catch

使用 async 方法意味着你能夠 try-catch next.
此示例爲全部錯誤添加了一個 .statusgithub

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

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,則簡單記錄錯誤。koa

若是這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: koa-docs-Zh-CN 支持, 謝謝.async

相關文章
相關標籤/搜索