senorpedro
senorpedro

Reputation: 231

node.js write http response to stream

i'm fetching some binary data over http. My code looks like:

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

now the output file is created but the filesize is 0. The url is correct though, i verified that with wget.

Thanks in advance & best regards

Upvotes: 22

Views: 62725

Answers (3)

Nadhas
Nadhas

Reputation: 5807

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

Upvotes: 3

ebohlman
ebohlman

Reputation: 15003

I'm assuming that here request is from mikeal's request library rather than being an instance of http.request. In that case you can simply do request(url).pipe(writeStream);

Remember that for debugging purposes, you can always pipe to process.stdout.

Upvotes: 7

bkconrad
bkconrad

Reputation: 2650

The callback for http.request only supplies one argument, which is a reference to the response of the request. Try

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

Also note that the ClientResponse implements ReadableStream, so you should use .pipe rather than .socket.pipe.

Upvotes: 26

Related Questions