我正在发出HTTP请求并侦听"数据":
response.on("data", function (data) { ... })
Run Code Online (Sandbox Code Playgroud)
问题是响应被分块,因此"数据"只是被发回的一部分.
我如何将全身送回?
Per*_* P. 71
request.on('response', function (response) {
var body = '';
response.on('data', function (chunk) {
body += chunk;
});
response.on('end', function () {
console.log('BODY: ' + body);
});
});
request.end();
Run Code Online (Sandbox Code Playgroud)
小智 25
在https://groups.google.com/forum/?fromgroups=#!topic/nodejs/75gfvfg6xuc上,Tane Piper提供了一个非常类似于scriptfromscratch的解决方案,但对于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
});
});`
Run Code Online (Sandbox Code Playgroud)
这解决了OP在scriptfromscratch的答案的评论部分提出的问题.
我从未使用过HTTP-Client库,但由于它的工作方式与服务器API类似,请尝试以下方法:
var data = '';
response.on('data', function(chunk) {
// append chunk to your data
data += chunk;
});
response.on('end', function() {
// work with your data var
});
Run Code Online (Sandbox Code Playgroud)
请参阅node.js文档以供参考.
为了支持所有可能的HTTP应用程序,Node.js的HTTP API非常低级.因此,块数据不是整体收到的.
您可以采用两种方法解决此问题:
1)在多个"数据"事件中收集数据,
并在打印输出之前将结果附加在一起.使用"end"事件确定
流完成的时间,然后您可以编写输出.
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) ;
Run Code Online (Sandbox Code Playgroud)
2)使用第三方软件包来抽象
收集整个数据流所涉及的困难.两个不同的包
为解决这个问题提供了一个有用的API(可能还有更多!):bl(Buffer
List)和concat-stream; 随便挑选!
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) ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48985 次 |
| 最近记录: |