nodejs socket在嵌套回调中挂起错误

时间:2014-09-30 03:38:28

标签: node.js

我尝试在回调中放入许多回调,但程序将在几次成功请求返回并发布“socket hang up”错误后关闭。我尝试从响应中收集数据并立即输出,有人可以告诉我哪个部分出错了...... 顺便说一下,我隐藏了请求方法的细节,我保证请求方法适用于http调用。

http.request(options1,function(data){
    var condition=data.length;
    var result=[];
    data.foreach(item,function(data){
        http.request(options2, function(data){
             if(data) result.push(data);
             condition--;
             if(condition<=0) console.log(result);
        }
    });
});

我的http.request方法

var request=function(options,callback){
    http.request(options,function(res){
        var body;

        res.on('data',function(chunk){
             body+=chunk;
        });
        res.on('end',function(){
             callback(JSON.parse(body));
        });

    request.end();
};

1 个答案:

答案 0 :(得分:0)

这不是http.request()的正确用法。

  • http.request()回调传递IncomingMessage对象,而非缓冲响应数据。

    • 编辑:您的自定义请求()应该看起来像这样,尽管您也应该处理错误。请注意正确放置request.end()并初始化var body = ''

      function request(options, callback) {
        http.request(options,function(res) {
          var body = '';
          res.setEncoding('utf8');
          res.on('data',function(chunk) {
            body += chunk;
          }).on('end',function() {
            callback(JSON.parse(body));
          });
        }).end();
      }
      
  • 您的请求缺少.end(),以便node.js知道您已准备好实际发送HTTP请求:http.request(..., ....).end();。这是您的特定错误的原因...服务器挂起连接,因为它已经厌倦了在TCP连接打开后等待您的请求。