3

次のエクスプレスコントローラーがあります

class ThingsController {

  static async index(req, res, next) {
    try {
      const things = await Thing.all();
      res.json(things);
    } catch(err) {
      next(err);
    }  
  }
}

とルーター

router.route('/things').get(ThingsController.index)

私のアプリでは、プロミスを使用して結果をレンダリングするいくつかのコントローラーを用意する予定です

毎回 try/catch ブロックを繰り返したくない

私の最初の解決策は、このロジックをプロミス拒否関数に抽出することでした。

const handlePromiseRejection = (handler) =>

  async (req, res, next) => {
    try{
      await handler(req, res, next);
    } catch(err) {
      next(err);
    };
  };

これで、ThingsController.index から try/catch ブロックを削除できるようになり、ルーターを次のように変更する必要があります。

router.route('/things')
  .get(handlePromiseRejection(ThingsController.index))

しかしhandlePromiseRejection、すべてのルートを追加するのは面倒な作業になる可能性があり、より賢い解決策が必要です。

あなたはなにか考えはありますか?

4

2 に答える 2