Qia*_*yue 2 error-handling koa koa2
这是问题的背景:我正在使用Koa 2跟踪开球 koa。但是开场练习中的练习是为 Koa 1 设计的。我为 Koa 2 的这个问题创建了一个问题: Koa 2错误处理程序的任务无法通过。
简而言之,我的问题是如何在发生 500 错误时显示自定义错误页面。
以下是代码:
// error handler middleware
function errorHandler(ctx, next) {
try {
return next();
}
catch(err) {
ctx.status = err.status || 500;
// I would like to display the custom message as follows
ctx.body = 'Oops! internal server error';
// with emitting the error event, don't work
// ctx.app.emit('error', err, ctx);
}
}
// to generate error
app.use(router.get('/error', ctx => {
ctx.throw('oops', 500);
}));
Run Code Online (Sandbox Code Playgroud)
但是我的错误页面总是显示为“内部服务器错误”,这是默认消息。好像ctx.body = 'Oops! internal server error';不能修改页面。
感谢您的帮助!
如果您使用 Koa2,则不必在中间件内部返回,而是使用await. 顺便说一下,你的中间件函数必须是一个async函数。
下面是一个结合 404 和 500 中间件的例子:
app.use(async (ctx, next) => {
try {
await next()
if (ctx.status === 404) ctx.throw(404)
} catch (err) {
console.error(err)
ctx.status = err.status || 500
ctx.body = errorPage.render({ // Use your render method
error: err,
})
}
})
// Your normal routes here
Run Code Online (Sandbox Code Playgroud)
首先,Koa 等待链中的下一个中间件(这是您的正常路线)。如果什么也没找到或发生错误,中间件链会向后移动并执行下一行,这会抛出 a404并将其捕获到catch.
现在在 catch 语句中,您可以获取404, 500(默认情况下)或者5xx是否发生其他错误。
页面的主体还设置了模板的渲染并将错误传递给模板,以便您可以使用它。
您不必发出错误,因为这是链中的最后一个捕获。
| 归档时间: |
|
| 查看次数: |
2626 次 |
| 最近记录: |