簡體   English   中英

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() ,因為您實際上不希望其余的中間件(也將嘗試發送響應)運行。

相反,您應該將所有日志記錄中間件放在首位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM