javascript - Node 和 http.get 中的管道函数

标签 javascript node.js http

我正在 nodeschool 的研讨会下学习 Node .车间名称是 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() 和管道是如何工作的......

最佳答案

唯一的区别是你们两个处理响应的方式。您逐 block 处理响应并附加相当于 body 的字符串。他们使用 pipe 发送可读流 response 并将其发送到可写流 bl (缓冲区列表),它可以等待可读流在继续之前完成。当您订阅“数据”的发射器来处理响应 block 时,bl 会在幕后执行此操作。

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

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

关于javascript - Node 和 http.get 中的管道函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899263/

相关文章:

git - 无法使用 http/https 将 Git 推送到远程存储库

c# - 作为代理或重定向器的负载平衡器

javascript - Jarviswidget 全屏未使用 Highchart 正确呈现

javascript - 如何找到方法所属的实例?

javascript - 如何重复模式并提取 Javascript 正则表达式中的内容

javascript - Angular 2 Electron 项目编译出现问题

http - GET方式发送的数据真的是有限的吗?

javascript - vue.js - craftyjs 点击不起作用

javascript - 从逗号分隔的句子中选择整个单词

javascript - npm link gulp 之后任务 'default' 不在你的 gulpfile 中