node.js write http response to stream

2020-02-09 03:23发布

问题:

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

回答1:

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.



回答2:

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.



回答3:

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