web-dev-qa-db-ja.com

node.jsストリームへのhttp応答の書き込み

http経由でいくつかのバイナリデータをフェッチしています。私のコードは次のようになります:

var writeStream = fs.createWriteStream(fileName);
request(url, function(err, res) {
    res.socket.pipe(writeStream);
});

これで出力ファイルが作成されますが、ファイルサイズは0です。URLは正しいですが、wgetで確認しました。

よろしくお願いします。

20
senorpedro

http.request のコールバックは、リクエストの response への参照である1つの引数のみを提供します。試す

http.request(url, function(res) {
    res.pipe(writeStream);
});

また、ClientResponseReadableStream を実装するため、.pipeではなく.socket.pipeを使用する必要があります。

23
bkconrad

ここでrequestは_http.request_のインスタンスではなく、mikealのリクエストライブラリからのものであると想定しています。その場合は、単純にrequest(url).pipe(writeStream);を実行できます

デバッグの目的で、常に_process.stdout_にパイプできることを覚えておいてください。

7
ebohlman
var readStream = fs.createReadStream(fileName);
request(url, function(err, res) {
  readStream.pipe(res);
  readStream.on('end', function() {
    //res.end({"status":"Completed"});
  });
});
4
Udhaya