0

現在、特定の Web サイトのすべてのファイル名 (既存の各フォルダー内) の要求を返そうとしています。私の Web アプリケーションは、NodeJS、Express、Cheerio、および Request to Web Scrape を使用しています。私のコードは、最初にすべてのフォルダー名のリストを取得しています。フォルダー名のリストを取得した後、各フォルダー名の内部に移動してファイル名のリストを取得し、それらを「files」配列に格納します。最後に、'files' 配列がクライアント側に送信されるものです。

私の要求は常に「ファイル」の空のリストを返すため、現在、非同期のものに大きな問題があります。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/で表示できます。

4

1 に答える 1