此系列文章的应用示例已发布于 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