KoaJS可以在on('error')回调中呈现错误页面吗?

时间:2016-03-13 03:15:35

标签: error-handling koa

只是检查,但似乎无法在错误回调中呈现错误页面?

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;
  }
});

1 个答案:

答案 0 :(得分:0)

应用程序错误事件对于集中式错误处理和日志记录非常有用。事件的上下文(this)与请求上下文不同。但是,如果无法再响应请求,请求上下文可能会传递给错误事件:

  

如果req / res循环中出现错误并且无法响应客户端,则也会传递Context实例:

app.on('error', function(err, ctx){  
  log.error('server error', err, ctx);  
});
  

当发生错误并且仍然可以响应客户端时,也就是没有数据写入套接字,Koa将适当地响应500“内部服务器错误”。在任何一种情况下,都会发出应用程序级别的“错误”以进行日志记录。

source

使用中间件是捕获和响应错误的推荐方法。根据{{​​3}}。