javascript - node.js 表达承诺路由器错误处理包装器
问题描述
我正在尝试创建一个错误处理包装器,以与 nodejs 中 express 的 promise 路由器扩展一起使用。
对于初学者,我尝试简单地包装异步处理函数:
function error_catcher(f)
{
return (async function (request, response) {
await f(request, response);
});
}
router.get("/bar", (error_catcher((async (request, response) => {
throw (new Error("bar error"));
}))()));
但是,当我运行它时,我得到:
Error: Expected a callback function but got a [object Promise]
at wrapHandler (/tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:10:15)
at /tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:87:24
at Array.map (<anonymous>)
at Function.instanceToWrap.(anonymous function) [as get] (/tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:86:38)
at Object.<anonymous> (/tmp/complete/server.js:361:8)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
因此,如果有人能指出我的错误并帮助我使异步函数的包装器工作,我应该能够自己添加异常捕获和错误处理。
解决方案
你需要这样的中间件
const error_catcher = fn =>
(request, response, next) => {
Promise
.resolve(fn(request, response, next))
.catch(next);
};
你可以像这样使用它
router.get("/bar", error_catcher(async (request, response, next) => {
return await next(new Error("bar error"));
}));
推荐阅读
- postgresql - 无法使用 aws 导入 Heroku Postgres
- c# - 返回模型上的 MVC Web api 错误,其中包含模型列表
- single-page-application - Recpatcha 在 Angular js 中刷新页面之前不会渲染
- javascript - 如何在 JQGrid 中选择列的下拉列表时获取 RowId
- python-3.x - 使用 Python 创建 JSONL
- opencv - 如何提高护照的识别度?
- php - 为什么 opcache 缓存字节码而不是机器码?
- c# - 如何在字符串上获取特定的主站点文本
- javascript - 如何在画布中调整使用 fillText() 添加的文本大小?
- python - “如何使用 argparse 模块并从命令行调用函数?”