【问题标题】:Node.js proxy server socket hang upNode.js 代理服务器套接字挂断
【发布时间】:2016-05-05 14:11:10
【问题描述】:

我使用 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)

提前感谢您的帮助。

【问题讨论】:

  • 你的代码在哪里?向我们展示 events.js 源代码

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    所以在我的情况下,套接字挂断与发布请求有关,并且从邮递员和浏览器获取请求都可以正常工作

    从第一台服务器发送的 post 请求正文是原始 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);
       }
    }
    

    【讨论】:

      最近更新 更多