2014-10-26 82 views
0

我需要给我的程序3个URL,而不是按给定的URL顺序打印服务器响应。 我需要一种方法来查看来自哪个URL的响应,但在文档中找不到任何解决方案。有没有像“response.getURL”那样的东西? 在此先感谢。从http.get()得到url响应

var strings = []; 
var ended = 0; 
for(int i=0; i<urls.length; i++){ 
    http.get(urls[i], function(response){ 
     var wholeData = ""; 
     response.setEncoding('utf8'); 
     response.on('error', console.error); 
     response.on('data', function(data){ 
      wholeData += data; 
     }); 
     response.on('end', function(){ 
      ended ++; 
      strings[???] = data; 
      if(ended == urls.length) 
       printStrings(); 
     }); 
    }); 
} 

回答

1

您使用的是单一的URL为http.get()urls[i]

response将对应于那个urls[i]

0

如果你想分配strings[i] = wholeData你将不得不改变你如何循环,因为该事件处理程序中的i的值将等于urls.length。你可以使用像async库这将避免你不得不保持请求柜台围得等,但如果你想保持你现有的代码,你需要使用一个封闭的http.get()各地捕捉i或只是使用urls.forEach()

urls.forEach(function(url, i) { 
    http.get(url, function(response){ 
    var wholeData = ''; 
    response.setEncoding('utf8'); 
    response.on('error', console.error); 
    response.on('data', function(data){ 
     wholeData += data; 
    }); 
    response.on('end', function(){ 
     ++ended; 
     strings[i] = wholeData; 
     if (ended === urls.length) 
     printStrings(); 
    }); 
    }); 
}); 

或者,您可以通过使用url而不是数组索引来对结果进行分组,方法是将strings作为对象,而不是strings[url] = wholeData

+0

该练习不允许使用异步库。我在for循环中封装了一个额外的函数,所以索引不会丢失,并且运行良好。 感谢您的帮助。 – greenkiweez 2014-10-26 18:39:44