Node和http.get中的pipe道function

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

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

我提交的答案如下。

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道工程…

唯一的区别是你们两个如何处理这个回应。 你用chunk处理了响应块,并附加了相当于body的string。 他们使用pipe来发送可读streamresponse ,并将其发送到可写streambl (缓冲区列表),这可以等到可读stream完成后再继续。 当你订阅“数据”的发射器来处理响应块时, bl在封面下面。

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

编辑:我只是注意到你的post的date。 这是奇怪的没有人回答这个…