gpt4 book ai didi

error-handling - Koa 出错时显示自定义页面

转载 作者:行者123 更新时间:2023-12-03 07:39:58 25 4
gpt4 key购买 nike

这是问题的背景:我正在关注 kick-off-koa使用Koa 2。但是启动中的练习是为 Koa 1 设计的。我为 Koa 2 的这个问题创建了一个问题:Task of error handler with Koa 2 cannot pass .

简单来说,我的问题是如何在发生 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);
}));

但是我的错误页面始终显示为“内部服务器错误”,这是默认消息。看来 ctx.body = '哎呀!内部服务器错误';无法修改页面。

感谢您的帮助!

最佳答案

如果您使用Koa2,则不必在中间件内部返回,而是使用await。顺便说一下,您的中间件函数必须是一个异步函数。

以下是 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

首先,Koa 等待链中的下一个中间件(这是您的正常路线)。如果没有找到任何内容或发生错误,中间件链将向后执行并执行下一行,这会抛出 404 并在 catch 中捕获它。

现在,在 catch 语句中,如果发生其他错误,您可以获得 404500(默认情况下)或 5xx

页面正文还设置了模板的渲染并将错误传递给模板,以便您可以使用它。

您不必发出错误,因为这是链中的最后一个捕获。

关于error-handling - Koa 出错时显示自定义页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com