Node.js Express – 在代理请求之后调用next()

我正在编写Express.js应用程序,它应该将请求路由到某个代理服务器,作为pipe道中的最后一步。 我使用了http-proxy代理库,因为它支持websocket。 问题是我需要在redirect请求之后继续使用我的应用程序,以便收集一些我将用于logging的信息(响应时间,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(...)被调用后,是否有解决scheme? 或者如果我的方法是错误的,有谁可以build议我一个解决scheme呢?

在发送响应之后,您不应该调用next() ,因为您主动不希望剩下的中间件(也将尝试发送响应)运行。

相反,你应该把所有的日志logging中间件放在第一位。