Node.js代理服务器套接字挂起

时间:2016-05-05 14:11:10

标签: node.js sockets reverse-proxy http-proxy

我使用Node.js作为代理服务器,我无法摆脱以下错误。任何熟悉NodeJS的人都可以帮助找到解决方案。每次发生这种情况我都必须重新启动.js代理。

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: socket hang up
    at createHangUpError (http.js:1264:15)
    at CleartextStream.socketCloseListener (http.js:1315:23)
    at CleartextStream.EventEmitter.emit (events.js:93:17)
    at SecurePair.destroy (tls.js:938:22)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

有时会发生此错误,这是正常的,因为客户端/服务器可能会以错误的方式自行断开连接。你可以听到错误'套接字上的事件,因此您可以捕获错误并且不会重新启动整个过程。

答案 1 :(得分:0)

因此,在我的情况下,套接字挂起是与post请求一起使用的,而get请求在post man和浏览器中都可以正常工作

从第一台服务器发送的发布请求正文是原始JSON,因此代理服务器将无法解析该正文。

我们需要根据请求对主体进行字符串化,下面的代码将帮助我们根据请求的触发器对数据进行字符串化并将其发送到代理服务器

const proxy = httpProxy.createProxyServer();

proxy.on('proxyReq', proxyRequestHandeler);

proxyRequestHandeler = (proxyReq, req) => {
   if(req.body) {
       const bodyData = JSON.stringify(req.body);
       // In case if content-type is application/x-www-form-urlencoded -> we need to change to application/json
       proxyReq.setHeader('Content-Type','application/json');
       proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
       // Stream the content
       proxyReq.write(bodyData);
   }
}