1

我在 Sai 框架上使用 co 模块进行编码。

我想捕捉 InvalidError 但错误日志显示“未定义”。

如何修复此代码?

Co 模块无法捕获 ErrorType 规范??

detail: function (req, res) {
  co(function *() {
    let errors = [];
    const text = req.param('text');

    if (text.length <= 0) {
      throw new InvalidError('text is required');
    }

  }).catch((InvalidError, err) => {
    sails.log.warn(err);
    errors.push(err.message);
    req.flash('errors', errors);
    res.redirect('/somewhere/view');
  }).catch((Error, err) => {
    sails.log.error(err);
    res.serverError(err);
  });
}

错误日志在这里

warn: undefined
error: undefined
error: Sending empty 500 ("Server Error") response
4

2 回答 2

1

catch方法只接受一个参数:err. 尝试:

.catch(err => {
    sails.log.warn(err);
    errors.push(err.message);
    req.flash('errors', errors);
    res.redirect('/somewhere/view');
})
于 2016-06-14T05:34:38.033 回答
1

你没有使用蓝鸟,是吗?标准catch方法没有错误类型过滤,你需要自己做:

.catch(err => {
  if (err instanceof InvalidError) {
    sails.log.warn(err);
    errors.push(err.message);
    req.flash('errors', errors);
    res.redirect('/somewhere/view');
  } else if (err instanceof Error) {
    sails.log.error(err);
    res.serverError(err);
  } else {
    console.error("You've thrown a non-error! Shame on you!");
  }
});
于 2016-06-14T05:47:38.373 回答