为什么打印来自response.on(“end”,回调)的数据不同于从response.on(“data”,callback)打印数据?

时间:2017-04-20 04:08:17

标签: javascript node.js

我正在研究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"                        
   ""                                  ==    ""                                 

────────────────────────────────────────────────────────────────────────────────

前一代码仅记录最后一个元素。这是为什么?

谢谢!

1 个答案:

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