0

奇妙な問題があります。このコードを呼び出して、メインの実行行で http 要求を作成すると:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body) // Print the google web page.
    }
})

予想どおり、Google ページの HTML が出力されます。

ただし、バッチ ダウンロード スクリプト/クローラーを実行しているため、非常に大きな JSON ファイルを解析し、そのファイルから生成した URL ごとに要求を実行しています。

解析を行うために、JSONStream パーサーを使用しています。コードは次のとおりです。

parser.on('data', function (obj) {
    console.log("Found uri");
    console.log(obj);
});

コンソールに URI が出力されているため、コードは正しく実行されています。

ただし、解析ブロック内でリクエストを行うと、リクエスト コールバックは実行されません。コードは次のとおりです。

parser.on('data', function (obj) {

    console.log("Found uri");
    console.log(obj);

    var identifierArray = obj['dc.identifier'];

    if(identifierArray != null && identifierArray instanceof Array)
    {
        for(var i = 0; i < identifierArray.length; i++)
        {
            var dryadIdentifier = identifierArray[i];
            if(dryadIdentifier.indexOf("dryad") != -1)
            {
                var fullUrl = "http://datadryad.org/resource/"+dryadIdentifier+"/mets.xml"
                //var fileDestination = __dirname +"/"+downloadSubDir+"/"+dryadIdentifier.replace("/","_")+".xml"
                var fileDestination = __dirname +"/"+downloadSubDir+"/"+fileCounter+".xml";

                fileCounter++;

                console.log("Sending request to "+ fullUrl + "   ...");

               //REQUEST SENT HERE; SAME CODE AS ABOVE.

                var request = require('request');
                request('http://www.google.com', function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        console.log(body) // Print the google web page.
                    }
                })

                sleep.usleep(500000); //dont hammer the server
            }
        }
    }
});

ログが表示されます

Sending request to http://datadryad.org/resource/doi:10.5061/dryad.s737f/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.s737f/1/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.1fd83/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.1fd83/1/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.4vk6d/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.c3k8m/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.5410v/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.492r0/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.m6g1b/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.m6g1b/1/mets.xml   ...
Sending request to http://datadryad.org/resource/doi:10.5061/dryad.4dm30/mets.xml   ...

しかし、html は印刷されません (目的のサーバーの問題を除外するために、json から解析した URL をまだ使用していないため、Google ホームページを何度も印刷する必要があります。

長い手紙で申し訳ありませんが、私はこの動作に途方に暮れています(まだnodejsを学んでいます... :-O)

4

1 に答える 1