我目前正在尝试返回特定网站上所有文件名(在每个现有文件夹中)的请求。我的 Web 应用程序使用 NodeJS、Express、Cheerio 和 Request to Web scrape。我的代码首先获取所有文件夹名称的列表。在检索文件夹名称列表后,它会进入每个文件夹名称以获取文件名列表并将它们存储在“文件”数组中。最后,“文件”数组将被发送到客户端。
现在我对异步的东西有一个大问题,因为我的请求总是会返回一个空的“文件”列表。我安装了 Q 节点模块并尝试使用 Promise,但没有获得我想要的结果。我还是 nodeJS 的新手,如果有人可以帮助我,我会很高兴.. :)
exports.getAllImages = function(req, res) {
var folders = [];
var files = [];
//Step 1: Get folder names and store all of them in the 'folders' array
var foldersUrl = 'http://students.washington.edu/jmzhwng/Images/';
request(foldersUrl, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
$("a:contains('-')").filter(function(){
var data = $(this)[0].attribs.href;
folders.push(data);
})
//Step 2: Using the 'folders' array, get file names in each folder and store all of them in the 'files' array
for (var i=0; i < folders.length; i++) {
var imagesUrl = 'http://students.washington.edu/jmzhwng/Images/' + folders[i];
request(imagesUrl, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
$("a:contains('.')").filter(function(){
var data = $(this)[0].attribs.href;
files.push(data);
})
}
})
}
//Step 3: Return all file names to client-side
res.json({
images: files
}, 200);
console.log('GET ALL IMAGES - ' + JSON.stringify(files));
}
})
为了更好的可读性或支持,您可以查看我在这里创建的 JSFiddle:http: //jsfiddle.net/fKGrm/