2013-10-25 126 views
13

在Node.js中使用本地http.get(),我試圖將HTTP響應傳遞給一個流,我可以將dataend事件綁定到該流。Node.js HTTP響應流

我目前正在處理這個gzip的數據,使用:

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

gunzip解是一個流,這只是工作。我試圖創建流(寫入流,然後讀取流)並管理響應,但一直沒有多少運氣。對於非壓縮內容,是否有任何建議來複制同樣的交易?

+0

我試圖獲取響應正文,然後一旦完成。我以爲我可以做'res.on('data')',但似乎從未觸發過。 – dzm

回答

20

來自HTTP請求的響應對象是可讀流的實例。因此,您將收集data事件的數據,然後在事件觸發時使用它。

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 
    }); 
}); 

readable.pipe(dest)基本上會做同樣的事情,如果上述body在本例中是一個寫流。

+1

Doh,事實證明,這是由於http沒有遵循重定向。你的代碼是我擁有的,並且它工作正常,除了重定向。我檢查了npm'follow-redirects'並將測試它。 – dzm

+0

你也可以嘗試流行的'request'模塊,它也跟着重定向 – vkurchatkin

+0

@vkurchatkin'請求'確實支持gzip內容 – dzm