Nodejs - 如何捕获抛出的错误并格式化它?

时间:2017-08-29 13:36:03

标签: node.js koa2

我不太明白如何捕获我在路线深处的错误,例如:

// put
router.put('/', async (ctx, next) => {
  let body = ctx.request.body || {}
  if (body._id === undefined) {
    // Throw the error.
    ctx.throw(400, '_id is required.')
  }
})

当没有提供_id时我会得到:

_id is required.

但我不会像在纯文本中那样扔掉它。我希望在顶级中捕获它然后格式化它,例如:

{
  status: 400.
  message: '_id is required.'
}

根据doc

app.use(async (ctx, next) => {
    try {
      await next()
    } catch (err) {
      ctx.status = err.status || 500

      console.log(ctx.status)
      ctx.body = err.message

      ctx.app.emit('error', err, ctx)
    }
  })

但即使没有尝试抓住我的中间件,我仍然得到_id is required.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用所需的状态代码抛出错误:

ctx.throw(400, '_id is required.');

使用default error handler格式化错误响应:

app.use(async (ctx, next) => {
  try {
    await next();
  } catch (err) {
    ctx.status = err.statusCode || err.status || 500;
    ctx.body = {
      status: ctx.status,
      message: err.message
    };
  }
});