Node.js Express -代理请求后调用next()
Node.js Express - calling next() after proxying the request
我正在编写Express.js应用程序,它应该将请求路由到某个代理服务器,作为管道中的最后一步。我使用了http-proxy
代理库,因为它支持websockets。问题是,我需要在请求被重定向后继续使用我的应用程序,以便收集一些我将用于日志记录的信息(api调用的响应时间等)。这个想法是在请求被代理后调用next()
函数,这应该返回到堆栈中的第一个中间件?(如果我写错了请指正)然后计算起始点和当前点的时差
在调用proxy.web(req, res, {target: serviceAddress});
和next()
之后-我得到错误:
_http_outgoing.js:335
throw new Error('Can''t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at d:'WebStorm Projects'api-gateway'node_modules'http-proxy'lib'http-proxy'passes'web-outgoing.js:85:11
at Array.forEach (native)
at Array.writeHeaders (d:'WebStorm Projects'api-gateway'node_modules'http-proxy'lib'http-proxy'passes'web-outgoing.js:84:35)
at ClientRequest.<anonymous> (d:'WebStorm Projects'api-gateway'node_modules'http-proxy'lib'http-proxy'passes'web-incoming.js:149:20)
at ClientRequest.emit (events.js:107:17)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:426:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
at Socket.socketOnData (_http_client.js:317:20)
at Socket.emit (events.js:107:17)
是否有一个解决方案,保持工作后proxy.web(...)
被调用?或者如果我的方法是错误的,谁能建议我一个解决方案吗?
您不应该在发送响应后调用next()
,因为您主动不希望剩余的中间件(它也将尝试发送响应)运行。
相反,您应该把所有的日志中间件放在前面。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- AJAX在数组循环中调用,只在上一次完成后调用next
- 带有next()调用的生成器函数
- Don'在IE中调用find next时,不要高亮显示Codemirror中的光标
- 护照.js身份验证成功,未调用 next()
- 路由调度从未呈现.您是否忘记在onBeforeAction中调用this.next()
- 如果在已经是最后一个元素上调用jQuery.next方法,那么它会返回什么
- 为什么我不需要在Sails.js控制器函数中调用next,即使它在其主体中有一个(异步的?)数据库查询
- ExpressJS链承诺多次调用next()函数
- Express.js:从路由处理程序中调用next(error)会调用全局错误处理中间件吗?
- Angular 2的Array Subject .next()不会调用其他组件的观察者
- 第一个next()调用的参数所在的位置
- Node.js Express -代理请求后调用next()
- 表达,Nodejs:如何调用'next()'只有在创建了模式之后
- 使用ajax调用时如何实现next/back函数
- Fullcalender next和previous在MVC4中进行更多的函数调用