使用nodejs缩写网页的返回URL
-
23-12-2019 - |
题
我正在尝试使用nodejs及其2个模块请求和Cheerio刮掉网站的简单Web应用程序。
我设法使用以下代码执行以下操作:
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
console.log($(this).attr('src'));
});
}
} )());
};
.
它可以很好地打印网站上的图片的网址,但我真正尝试在这里做的是创建一个我可以在函数之外使用的URL列表。我以这种方式尝试了,但它返回空列表:
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
urlList.push($(this).attr('src'));
});
}
} )());
};
.
如何解决这个问题?非常感谢
解决方案
您需要等到所有回调完成。
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
var images = $('img');
var counter = images.length;
images.each(function(){
urlList.push($(this).attr('src'));
counter--;
if (counter==0) {
// now we have all images!!
console.log(urlList);
}
});
}
})());
};
.
这是node.js的异步性质的一部分。如果事情变得更加复杂,我会建议您使用像 async
等流量控制库。不隶属于 StackOverflow