【发布时间】:2016-10-20 09:03:44
【问题描述】:
我是 node http 模块的一个彻底的清理工具并且遇到了一些问题。
这里的最终目标是获取一个巨大的 url 列表,找出哪些是有效的,然后从这些页面中抓取某些数据。所以第一步是确定一个 URL 是否有效,这个简单的练习让我感到困惑。
假设我们有一个数组 allURLs:
["www.yahoo.com", "www.stackoverflow.com", "www.sdfhksdjfksjdhg.net"]
我们的目标是迭代这个数组,向每个数组发出一个 get 请求,如果有响应,则将链接添加到工作 URL 列表(现在只是另一个数组),否则它会转到一个损坏 URL 列表。
var workingURLs = [];
var brokenURLs = [];
for (var i = 0; i < allURLs.length; i++) {
var url = allURLs[i];
var req = http.get(url, function (res) {
if (res) {
workingURLs.push(?????); // How to derive URL from response?
}
});
req.on('error', function (e) {
brokenURLs.push(e.host);
});
}
我不知道如何从请求/响应对象本身正确获取 url,或者真正如何构造这种异步代码 - 因为我再次是一个 nodejs 擦洗:(
对于大多数使用 res.headers.location 的网站都有效,但有时标头没有此属性,这会在以后给我带来问题。我也尝试过控制台记录响应对象本身,这是一个混乱而徒劳的努力
我已经尝试将 url 变量推送到 workingURLs,但是当任何会触发推送的响应返回时,for 循环已经结束并且 url 永远指向 allURLs 数组的最后一个元素。
感谢任何可以提供帮助的人
【问题讨论】:
标签: node.js http asynchronous response