Я создаю REST API с экспресс-расширением, следуя архитектуре этой статьи .Короче говоря, маршрутизатор вызывает контроллер.
Вот пример вызова:
router.get('/', ModelsController.getModels)
Пока это нормально работает, и теперь я улучшаю обработку ошибок с помощьюBoom.
Я хотел бы использовать обертку, как в этой статье , но, поскольку я не использую TS и поскольку я незнаком с Promises, я борюсь с этим.
Вот обертка:
exports.enhanceHandler = async function (handler) {
return async function (req, res, next) {
try {
const result = await handler(req, res);
if (result instanceof Error && Boom.isBoom(result)) {
res.status(result.output.statusCode).send(formatBoomPayload(result));
}
} catch (error) {
// now log errors to your errors reporting software
if (process.env.NODE_ENV !== "production" && (error.stack || error.message)) {
res.status(500).send(error.stack || error.message);
} else {
res.status(500).send(Boom.internal().output.payload);
}
}
next();
}
}
Я пытаюсь вызвать ее в моем маршрутизаторе, например:
router.get('/handler', enhanceHandler(ModelsController.getModels))
Однако у меня есть эта ошибка:
Error: Route.get() requires a callback function but got a [object Promise]
Что я мог сделать?Нужно ли выполнить обещание?изменить EnhiftHandler, чтобы он возвращал функцию, а не обещание?