我有以下快递控制器
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
在每条路线上添加可能是一项繁琐的任务,我希望有更聪明的解决方案。
你有什么想法?