从http.get()响应中获取url

时间:2014-10-26 16:53:33

标签: javascript node.js

我需要为程序提供3个URL,而不是按给定URL的顺序打印出服务器响应。 我需要一种方法来查看响应来自哪个URL,但我在文档中找不到任何解决方案。那里有“response.getURL”之类的东西吗? 提前谢谢。

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();
        });
    });
}

2 个答案:

答案 0 :(得分:1)

您正在使用http.get()的单个网址:urls[i]

response将与urls[i]对应。

答案 1 :(得分:0)

如果您要分配strings[i] = wholeData,则必须更改循环方式,因为该事件处理程序中i的值将等于urls.length。您可以使用像async这样的库来避免您不得不保留请求计数器等等,但如果您想保留现有代码,则需要在http.get()周围使用闭包来捕获{ {1}}或只使用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(); }); }); }); 作为对象并执行strings来按照网址而不是数组索引对结果进行分组。