我正在研究learnyounode的HTTP客户端分配。
我想知道为什么控制台记录来自response.on(“end”,callback)的数据只输出预期输出的最后部分,而控制台记录来自response.on(“data”,callback)的数据输出整个响应。
这是前者的代码:
var http=require("http");
http.get(process.argv[2], function(response){
var str;
response.setEncoding('utf-8');
response.on("error",function(error){
console.log(error);
});
response.on("data", function(data){
str=data;
});
response.on("end", function(){
console.log(str);
});
}).end();
结果显示:
ACTUAL EXPECTED
───────────────────────────────────────────────────────────────────────
"Veg out" != "Bodgy"
"" != "Chuck a sickie"
!= "Cook"
!= "Dag"
!= "Larrikin"
!= "Hit the turps"
!= "Counter meal"
!= "Hottie"
!= "Veg out"
!= ""
──────────────────────────────────────────────────────────────────────
response.on(“data”,callback)的代码是:
var http=require("http");
http.get(process.argv[2], function(response){
response.setEncoding('utf-8');
response.on("error",function(error){
console.log(error);
});
response.on("data", function(data){
console.log(data);
});
}).end();
结果是:
ACTUAL EXPECTED
────────────────────────────────────────────────────────────────────────────────
"Amber fluid" == "Amber fluid"
"Ankle biter" == "Ankle biter"
"Bities" == "Bities"
"Slabs" == "Slabs"
"Captain Cook" == "Captain Cook"
"Galah" == "Galah"
"Battler" == "Battler"
"Sickie" == "Sickie"
"Chook" == "Chook"
"Going off" == "Going off"
"" == ""
────────────────────────────────────────────────────────────────────────────────
前一代码仅记录最后一个元素。这是为什么?
谢谢!
答案 0 :(得分:1)
以下是关于HTTP请求如何工作的良好读物https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
当你这样做时
response.on("data", function(data) {
str = data;
});
您将str
的值替换为新的数据块。所以在end
,你做
response.on("end", function() {
console.log(str);
});
其中str
表示收到的最后一块数据。您希望连接所有收到的数据,如下所示:
response.on("data", function(data) {
str += data;
});