繁体   English   中英

Node和http.get中的管道功能

[英]pipe function in Node and http.get

我正在节点学校的研讨会下学习节点。 研讨会的名称是learnyounode,问题编号8. HTTP COLLECT

问题是: 编写一个程序,对作为第一个命令行参数提供给您的URL执行HTTP GET请求。 收集服务器中的所有数据(不仅仅是第一个“数据”事件),然后将两行写入控制台(stdout)。 您编写的第一行应该是一个整数,表示从服务器接收的字符数。 第二行应包含服务器发送的完整字符串。

我提交的答案如下。

var http = require('http');
var url = process.argv[2];
http.get(url,function(res){
    var body = '';
    res.on('error',function(err){
        console.error(err);
    })
    res.on('data',function(chunk){
        body+=chunk.toString();
    });
    res.on('end',function(){
        console.log(body.length);
        console.log(body);
    });
});

虽然他们提供的答案是,

var http = require('http')
var bl = require('bl')
http.get(process.argv[2], function (response) {
  response.pipe(bl(function (err, data) {
    if (err)
      return console.error(err)
    data = data.toString()
    console.log(data.length)
    console.log(data)
  }))
})


我想知道这两个代码之间的区别。 并请解释http.get()和管道如何工作......

唯一的区别是你们两个人如何处理响应。 您按块处理了响应块并附加了等效于body的字符串。 他们使用pipe发送可读流response并将其发送到可写流bl (缓冲区列表),该流可以等到可读流完成后再继续。 当您订阅“数据”的发射器来处理响应块时, bl执行此操作。

pipe是在可读流上调用的函数,它传递可写流的参数。

编辑:我刚刚注意到你的帖子的日期。 很奇怪没有人回答这个......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM