2014-03-28 31 views
1

在我的本地PC中,我设置了一个Node.js代理服务器,它向node.js RESTful MongoDb服务器发出请求,其中一个位于端口8080处,在端口3000 代理,我可以在REST风格的服务器日志,所有的疑问都正确发送回代理看,但代理挂断引发此错误:套接字挂在http.request到Node.js MongoDb服务器

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" 
       } 
    } 

回答