【问题标题】:pipe function in Node and http.getNode 和 http.get 中的管道函数
【发布时间】:2016-11-13 06:25:23
【问题描述】:

我正在nodeschool 的研讨会下学习节点。车间名称是 learnyounode,第 8 题。HTTP COLLECT

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

我提交的答案如下。

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() 和 pipe 是如何工作的......

【问题讨论】:

  • 请在这里也提供他们的问题

标签: javascript node.js http


【解决方案1】:

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

pipe 是一个在可读流上调用的函数,该函数传递了可写流的参数。

编辑:我刚刚注意到您发帖的日期。奇怪的是没有人回答这个......

【讨论】:

  • 即使您的回复晚了,3 年后我正在寻找这个很高兴有人写了一个很好的答案来描述差异:)。
猜你喜欢
  • 2013-08-27
  • 2021-07-09
  • 2021-11-22
  • 1970-01-01
  • 2011-04-02
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
相关资源
最近更新 更多