1

セイルフレームワークの共同モジュールを使用してコーディングしています。

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

Bluebird を使用していませんね。標準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 に答える
1

The catch method only takes a single argument: err. Try:

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