只是检查,但似乎无法在错误回调中呈现错误页面?
app.on('error', function(err) {
this.body = "ERROR: " + err.message; // this does not do anything
});
似乎唯一的方法是在中间件中使用try catch?
app.use(function *(next) {
// return this.throw('TESTING ERROR')
try {
yield next;
} catch (err) {
err.status = err.status || 500;
err.message = err.message || 'An error occured';
this.body = err.message;
}
});
app.use(function *(next) {
yield next;
if (this.status === 404) {
this.body = err.message;
}
});
答案 0 :(得分:0)
应用程序错误事件对于集中式错误处理和日志记录非常有用。事件的上下文(this
)与请求上下文不同。但是,如果无法再响应请求,请求上下文可能会传递给错误事件:
如果req / res循环中出现错误并且无法响应客户端,则也会传递Context实例:
app.on('error', function(err, ctx){
log.error('server error', err, ctx);
});
当发生错误并且仍然可以响应客户端时,也就是没有数据写入套接字,Koa将适当地响应500“内部服务器错误”。在任何一种情况下,都会发出应用程序级别的“错误”以进行日志记录。
使用中间件是捕获和响应错误的推荐方法。根据{{3}}。