我正在 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/