响应被分块时获得整个响应主体?
我正在做一个HTTP请求,并听取“数据”:
response.on("data", function (data) { ... }) 问题是响应被分块,所以“数据”只是一个被发回的主体。
我怎么把全身送回来?
 request.on('response', function (response) { var body = ''; response.on('data', function (chunk) { body += chunk; }); response.on('end', function () { console.log('BODY: ' + body); }); }); request.end(); 
通过https://groups.google.com/forum/?fromgroups=#!topic/nodejs/75gfvfg6xuc,Tane Piper提供了一个非常类似于scriptfromscratch的解决scheme,但对于JSON响应的情况:
  request.on('response',function(response){ var data = []; response.on('data', function(chunk) { data.push(chunk); }); response.on('end', function() { var result = JSON.parse(data.join('')) return result }); });` 
这解决了OP在scriptfromscratch的回答的评论部分提出的问题。
我从来没有使用HTTP客户端库,但因为它像服务器API一样工作,请尝试如下所示:
 var data = ''; response.on('data', function(chunk) { // append chunk to your data data += chunk; }); response.on('end', function() { // work with your data var }); 
请参阅node.js文档以供参考。
这是因为你需要调用JSON.parse(data.toString())。 数据是一个缓冲区,所以你不能直接parsing它。
 为了支持所有可能的HTTP应用程序,Node.js的HTTP API是非常低级的。 所以数据不是按块来接收的。 
 有两种方法可以解决这个问题: 
  1)在多个“数据”事件中收集数据并追加结果 
 一起打印输出。 使用“结束”事件来确定 
 当stream完成,你可以写输出。 
 var http = require('http') ; http.get('some/url' , function (resp) { var respContent = '' ; resp.on('data' , function (data) { respContent += data.toString() ;//data is a buffer instance }) ; resp.on('end' , function() { console.log(respContent) ; }) ; }).on('error' , console.error) ; 
  2)使用第三方软件包来抽象涉及的困难 
 收集整个数据stream。 两个不同的包提供了一个 
 有用的API来解决这个问题(可能还有更多!):bl(Buffer 
 列表)和concat-stream; 拿你的select! 
 var http = require('http') ; var bl = require('bl') ; http.get('some/url', function (response) { response.pipe(bl(function (err, data) { if (err) { return console.error(err) } data = data.toString() ; console.log(data) ; })) }).on('error' , console.error) ; 
如果你不介意使用请求库
 var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Print the google web page. } })