我尝试在回调中放入许多回调,但程序将在几次成功请求返回并发布“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();
};
答案 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连接打开后等待您的请求。