【问题标题】:Socket hang up on http.request to a Node.js MongoDb server套接字挂断 http.request 到 Node.js MongoDb 服务器
【发布时间】:2014-05-08 09:16:30
【问题描述】:

在我的本地电脑中,我设置了一个 Node.js 代理服务器,它向 node.js RESTful MongoDb 服务器发出请求,其中一个位于端口 8080,代理位于端口 3000。 我可以在 RESTful 服务器日志中看到所有查询都正确发送回代理,但代理挂断并抛出此错误:

    events.js:72
            throw er; // Unhandled 'error' event
                  ^
    Error: socket hang up
        at createHangUpError (http.js:1472:15)
        at Socket.socketOnEnd [as onend] (http.js:1568:23)
        at Socket.g (events.js:180:16)
        at Socket.EventEmitter.emit (events.js:117:20)
        at _stream_readable.js:920:16
        at process._tickCallback (node.js:415:13)

这就是我构建代理请求的方式:

      var proxy = function(req, res, next) {
        try {
          var options = mapRequest(req);    
          var dbReq = http.request(options, function(dbRes) {
            var data = "";
            res.headers = dbRes.headers;
            dbRes.setEncoding('utf8');

            dbRes.on('data', function(chunk) { 
              data = data + chunk;
             });

            dbRes.on('end', function() {
              res.header('Content-Type', 'application/json');
              res.statusCode = dbRes.statusCode;
              res.httpVersion = dbRes.httpVersion;
              res.trailers = dbRes.trailers;
              res.send(data);
              res.end();
            });

          });

          dbReq.end(JSON.stringify(req.body));

        } catch (error) {
          console.log('ERROR: ', error.stack);
          res.json(error);
          res.end();
        }
       };

这些是发送到 MongoDB 服务器的选项:

    {
      "hostname":"127.0.0.1",
      "path":"//databases/db1/collections/documents?apiKey=134557676&l=5&sk=0",
      "method":"GET",
      "port":"8080",
      "headers":{
                "host":"127.0.0.1",
                "connection":"keep-alive",
                "accept":"application/json, text/plain ",
                "x-xsrf-token":"VPDlgN2iMWU2IXPIPH0aiwS5",
                "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36",
                "dnt":"1",
                "referer":"http://localhost:3000/documents",
                "accept-encoding":"gzip,deflate,sdch",
                "accept-language":"it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4",
                "cookie":"XSRF-TOKEN=VPDlgN2iMWU2IXPIPH0aiwS5; connect.sess=s%3Aj%3A%7B%22passport%22%3A%7B%22user%22%3A%225298bfa9e4b070e1c60fd84f%22%7D%2C%22_csrf%22%3A%22VPDlgN2iMWU2IXPIPH0aiwS5%22%7D.wc85bNSpJIl7KnCHOUXiG5V2e7SI9XR9EctByTtqhu4"
               }
    }

【问题讨论】:

    标签: node.js


    【解决方案1】:

    我找到了将http.request()替换为http.get()的解决方案,显然是socked挂断了,因为套接字在超时期限内没有发送连接结束事件。 这里有一个类似的问题:NodeJS - What does "socket hang up" actually mean?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2016-06-05
      • 2018-05-07
      • 2020-12-19
      • 2021-01-02
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多