Javascript Express异步中间件
正如我们所知,Express在处理异步函数方面不是很好,特别是在错误处理方面 我确实定义了一个异步中间件,如下所示:Javascript Express异步中间件,javascript,node.js,Javascript,Node.js,正如我们所知,Express在处理异步函数方面不是很好,特别是在错误处理方面 我确实定义了一个异步中间件,如下所示: const asyncMiddleware = fn => (req, res, next) => { Promise.resolve(fn(req, res, next)).catch(next); }; 然后: router.get('/', asyncMiddleware(myRouteHandler)) 有没有一种方法可以正确地重写中间件,使其直接被E
const asyncMiddleware = fn => (req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next);
};
然后:
router.get('/', asyncMiddleware(myRouteHandler))
有没有一种方法可以正确地重写中间件,使其直接被Express router使用
router.use(asyncMiddleware)
Koa在本地支持承诺,预计Express 5也会这样做 有没有一种方法可以正确地重写中间件,使其直接被Express router使用
router.use(asyncMiddleware)
没有办法。为了做到这一点,使用中间件和路由处理程序的Expressapp
和router
(Express.router
和Express.Route
类)方法应该进行猴子补丁,以完成asyncMiddleware
的功能
否则,基于承诺的中间件应该使用助手手动包装,如
异步中间件Koa本机支持承诺,预计Express 5也会这样做
有没有一种方法可以正确地重写中间件,使其直接被Express router使用
router.use(asyncMiddleware)
没有办法。为了做到这一点,使用中间件和路由处理程序的Expressapp
和router
(Express.router
和Express.Route
类)方法应该进行猴子补丁,以完成asyncMiddleware
的功能
否则,基于promise的中间件应该使用类似于异步中间件的助手手动包装,当然有,但我很想了解更多您想要做的事情,因为Express有自己的方法。没有合法的方法。Express应该被黑客攻击才能做到这一点。查看express ko作为参考。@estus“hacked”可能不是正确的术语,我会说“enhanced”:@James好吧,增强应该以一种hacked的方式进行,因为express类是如何实现的,它们是无法轻松扩展的混合体。@estus为什么你认为这不能用自定义中间件来实现?我实际上已经为某些路由器实现了这一点,我知道它们都将使用异步代码,这个应用程序已经被嵌入了EXPRESS,所以只切换到膝关节炎或类似的想法并不是一个选择。当然,我会很有兴趣多听你想做的事情,因为Express有它自己的。没有合法的方法。Express应该被黑客攻击才能做到这一点。查看express ko作为参考。@estus“hacked”可能不是正确的术语,我会说“enhanced”:@James好吧,增强应该以一种hacked的方式进行,因为express类是如何实现的,它们是无法轻松扩展的混合体。@estus为什么你认为这不能用自定义中间件来实现?事实上,我已经为某些路由器实现了这一点,我知道它们都会使用异步代码,而且应用程序已经被大量嵌入了Express,所以只切换到膝关节炎或类似的想法并不是一个选项。问题是当已经有框架(如Koa)已经这样做时,你是否想把实际上是石膏的东西放在框架上。“没有办法”-当然有,问题是当已经有框架(如Koa)已经这样做时,你是否想把实际上是石膏的东西放在框架上。