0

node.jsスクリプトを使用して.jsファイルをダウンロードしようとしていますが、ファイルの一部のみがダウンロードされています。

具体的には、これが問題の原因と思われる部分です。

response.on('data', function (chunk) {
    out.write(chunk);
    var theModule = require(__dirname + "/" + filename);
    //less than half of the file is downloaded when the above line is included.
});

完全なソースコードは次のとおりです。

var http = require('http');
var fs = require('fs');

downloadModule("functionChecker.js");

function downloadModule(filename) {
    var google = http.createClient(80, 'www.google.com');
    var request = google.request('GET', '/svn/' + filename, {
        'host': 'javascript-modules.googlecode.com'
    });
    request.end();
    out = fs.createWriteStream(filename);
    request.on('response', function (response) {
        response.setEncoding('utf8');
        response.on('data', function (chunk) {
            out.write(chunk);
            var theModule = require(__dirname + "/" + filename);
            //less than half of the file is downloaded when the above line is included.
            //If the import statement is omitted, then the file is downloaded normally.
        });
    });
}
4

1 に答える 1

1

イベントはdata複数回呼び出すことができます。すべてのデータが書き込まれるまで待つ必要があります。

response.setEncoding('utf8');
response.on('data', function (chunk) {
    out.write(chunk);
});
response.on('end', function(){
    out.end();
    var theModule = require(__dirname + "/" + filename);
});

また、ドキュメントcreateClientに記載されているように、は非推奨です。また、ロジックを単純化するために使用することをお勧めします。pipe

function downloadModule(filename) {
  http.get({
    hostname: 'javascript-modules.googlecode.com',
    path: '/svn/' + filename
  }, function(res){
    var out = fs.createWriteStream(filename);
    out.on('close', function(){
      var theModule = require(__dirname + "/" + filename);
    });

    res.pipe(out);
  });
}
于 2013-01-01T20:17:44.450 に答える