【问题标题】:nodejs socket hang up error in nested callback嵌套回调中的nodejs套接字挂起错误
【发布时间】:2014-09-30 03:38:28
【问题描述】:

我尝试在一个回调中放置许多回调,但是在返回几个成功请求后程序将关闭并发布“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();
};

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

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

      • 编辑:您的自定义 request() 应该看起来像这样,尽管您也应该处理错误。注意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 连接打开后厌倦了等待您的请求。

    【讨论】:

    • 嗯,这个“http.request”不是节点中的那个,我已经将它包装在我自己的“http.request”方法中,它就是这样工作的。我的响应句柄已经在方法内部做了,我测试了这个方法,它有效,抱歉没有引导。
    • 好的,但是您的自定义请求方法也不正确。内置的http.request() 回调被传递一个IncomingMessage 对象(只是res),而不是(req, res, error)
    • 我已经更新了我的答案。确保在带有循环的主代码中,您实际上使用的是您自己的自定义 request(),而不是您仍在显示的 http.request()...
    • 我已经找到问题了,和这个功能无关,不过还是谢谢你的帮助。
    猜你喜欢
    • 2015-09-13
    • 2014-10-02
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2021-07-29
    • 2013-10-05
    相关资源
    最近更新 更多