web-dev-qa-db-fra.com

node.js écrit la réponse http au flux

je récupère des données binaires sur http. Mon code ressemble à:

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

maintenant le fichier de sortie est créé mais la taille du fichier est 0. L'URL est correcte cependant, j'ai vérifié cela avec wget.

Merci d'avance Cordialement

20
senorpedro

Le rappel pour http.request ne fournit qu'un seul argument, qui fait référence à la réponse de la demande. Essayer

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

Notez également que le ClientResponse implémente ReadableStream , vous devez donc utiliser .pipe plutôt que .socket.pipe.

23
bkconrad

Je suppose qu'ici request provient de la bibliothèque de requêtes de mikeal plutôt que d'être une instance de http.request. Dans ce cas, vous pouvez simplement faire request(url).pipe(writeStream);

N'oubliez pas qu'à des fins de débogage, vous pouvez toujours diriger vers 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