Node.js HTTP响应结束事件?

10

我曾使用这段代码发送一些http请求并获取数据,一切正常。最近我更新了apache、php和node到最新版本。

但是'close'事件停止触发了。我也尝试了'end'和'finish',但都不起作用。

我需要知道响应何时结束,以便我可以开始处理数据,通常响应会分成几个块。你们能帮忙吗?

var req = http.request(options, function(res) {
      res.on('data', function (chunk) {
        if(chunk != null && chunk != "") {
            dataString += chunk; c
        } 
      });
    });

    req.on('close', function () {
        //tadaa it is finished, so we can process dataString
    });

    req.write(post_data);
    req.end();

当前版本:Apache 2.4、PHP 5.4、Node 0.10.9

也许是 Apache 的某些特定配置设置阻止了它关闭连接?

P.S. 我不认为是 Apache 的问题,我尝试使用相同的结果访问 google.com,结果也很奇怪。有人有一个可行的代码示例吗?(加载大数据,并知道何时结束)


这可能与streams2有关。尝试在req.on('end')之后添加req.on('data'...)或调用req.resume() - Andreas Hultgren
1个回答

15
你应该等待响应的end事件,而不是请求的事件。
例如:
res.on('end', function () {
    // now I can process the data
});

这个有效,谢谢!我很好奇之前它是如何工作的...但无论如何非常感谢! - Avetis Zakharyan
可能较新的Apache已经开启了类似于连接保持活动状态的功能,因此它不会在单个请求后关闭连接。 - Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接