У меня есть следующий экспресс-контроллер
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);
};
};
и теперь мы можем удалить try / catchзаблокировать файл ThingsController.index и изменить маршрутизатор следующим образом:
router.route('/things')
.get(handlePromiseRejection(ThingsController.index))
Но добавление handlePromiseRejection
на каждом маршруте может быть утомительной задачей, и я хотел бы найти более умное решение.
У вас есть идеи?