2012-08-10 8 views
17

Ich bin ein paar Binärdaten über http. Mein Code sieht so aus:node.js schreibe HTTP-Antwort zu Stream

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

nun die Ausgabedatei erstellt, aber die Dateigröße ist 0. Die url allerdings richtig ist, ich mit wget, dass verifiziert.

Vielen Dank im Voraus & freundlichen Grüßen

Antwort

18

Der Rückruf für http.request liefert nur ein Argument, das dem response des Antrags eine Referenz. Versuchen

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

Beachten Sie auch, dass die ClientResponse implementiert ReadableStream, so sollten Sie .pipe verwenden, anstatt .socket.pipe.

6

Ich gehe davon aus, dass hier request von Mikeal Wunsch Bibliothek ist eher als eine Instanz von http.request zu sein. In diesem Fall können Sie einfach request(url).pipe(writeStream);

Denken Sie daran, dass für Debugging-Zwecke können Sie immer eine Pipeline an process.stdout.

+0

Dank. super hilfreich Tipp auf der stdout –

3

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

+2

können Sie nur eine lesbare zu einem beschreibbaren, nicht das Gegenteil wie Sie vorschlagen. – Salketer