2013-10-25 123 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