次のエクスプレスコントローラーがあります
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
、すべてのルートを追加するのは面倒な作業になる可能性があり、より賢い解決策が必要です。
あなたはなにか考えはありますか?