Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express异步中间件_Javascript_Node.js - Fatal编程技术网

Javascript 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

正如我们所知,Express在处理异步函数方面不是很好,特别是在错误处理方面

我确实定义了一个异步中间件,如下所示:

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)
没有办法。为了做到这一点,使用中间件和路由处理程序的Express
app
router
Express.router
Express.Route
类)方法应该进行猴子补丁,以完成
asyncMiddleware
的功能


否则,基于承诺的中间件应该使用助手手动包装,如
异步中间件

Koa本机支持承诺,预计Express 5也会这样做

有没有一种方法可以正确地重写中间件,使其直接被Express router使用

 router.use(asyncMiddleware)
没有办法。为了做到这一点,使用中间件和路由处理程序的Express
app
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)已经这样做时,你是否想把实际上是石膏的东西放在框架上。