2013-10-25 15 views
13

Utilizzando il codice nativo http.get() in Node.js, sto provando a reindirizzare una risposta HTTP a un flusso a cui è possibile associare eventi data e end.Node.js Stream di risposta HTTP

Attualmente sto manipolazione di questo per i dati gzip, utilizzando:

http.get(url, function(res) { 
    if (res.headers['content-encoding'] == 'gzip') { 
    res.pipe(gunzip); 
    gunzip.on('data', dataCallback); 
    gunzip.on('end', endCallback); 
    } 
}); 

Gunzip è un flusso e questo funziona. Ho provato a creare flussi (scrivere flussi, quindi leggere flussi) e inviare la risposta, ma non ho avuto molta fortuna. Qualche suggerimento per replicare lo stesso accordo, per contenuti non compressi con gzip?

+0

Sto cercando di ottenere il corpo della risposta così come viene, quindi una volta finito. Pensavo di poter fare 'res.on ('data')' ma che non sembra mai attivarsi. – dzm

risposta

20

L'oggetto risposta da una richiesta HTTP è un'istanza di flusso leggibile. Pertanto, raccogli i dati con l'evento data, quindi utilizzalo quando si verifica l'evento end.

var http = require('http'); 
var body = ''; 

http.get(url, function(res) { 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    res.on('end', function() { 
    // all data has been downloaded 
    }); 
}); 

Il readable.pipe(dest) sarebbe fondamentalmente fanno la stessa cosa, se body nell'esempio di cui sopra erano un flusso scrivibile.

+1

Doh, beh, si è scoperto a causa di http non seguendo i reindirizzamenti. Il tuo codice è quello che ho e funziona bene, ad eccezione dei reindirizzamenti. Ho controllato npm 'follow-redirect' e lo testeremo. – dzm

+0

Puoi anche provare il popolare modulo 'request', che segue anche i reindirizzamenti – vkurchatkin

+0

@vkurchatkin' request' supporta i contenuti con gzip – dzm

Problemi correlati