Ani*_*Ani 7 javascript http node.js
我正在节点学校的研讨会下学习节点.研讨会的名称是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);
});
});
Run Code Online (Sandbox Code Playgroud)
虽然他们提供的答案是,
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)
}))
})
Run Code Online (Sandbox Code Playgroud)
我想知道这两个代码之间的区别.并请解释http.get()和管道如何工作......
唯一的区别是你们两个人如何处理响应.您按块处理响应块并附加等效的字符串body.他们曾经pipe发送可读流response并将其发送到可写流bl(缓冲区列表),该流可以等到可读流完成后再继续.当您订阅"数据"的发射器来处理响应块时,bl这是否在幕后.
pipe 是一个在可读流上调用的函数,它传递可写流的参数.
编辑:我刚刚注意到你的帖子的日期.很奇怪没有人回答这个......
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |