此係列文章的應用示例已發佈於 GitHub: koa-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.git
使用 async 方法意味着你能夠 try-catch next
.
此示例爲全部錯誤添加了一個 .status
:github
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