【发布时间】:2019-08-25 12:12:24
【问题描述】:
我有以下快递控制器
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)
在我的应用程序中,我计划有几个控制器使用 Promise 来呈现结果
我不想每次都重复 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 可能是一项繁琐的任务,我希望有更聪明的解决方案。
你有什么想法吗?
【问题讨论】:
-
看看
express-async-errors(可能有人和你有同样的想法) -
它就像@naga-elixir-jar 的魅力。您能否将此评论变成答案,我会接受它
标签: express promise es6-promise express-router