在Node.js流模块的可读性对象的简要分析
Nodejs带来了一个模块,称为流,它取得了一套流对象的构造函数。现在我只说最简单的stream.readable。
事实上,几乎所有的Nodejs使用可读的情况下,只是不太在乎它平时。一个很典型的例子,在HTTP模块,我们都需要和研究对象时,每个请求的处理,并且要求实际上是一个可读的对象,我们可以读到这个要求以流的形式的HTTP请求的实体部分。
所以问题是,为什么HTTP模块应该通过流来设计或者从另一个层面,问题是,如果你得到Nodejs POST请求的内容吗学生知道搜索引擎可以很容易地找到这样的答案:听数据事件,收集数据,并将收集到的数据合并到最终事件中。是的,这是解决这个问题的方法。但是为什么设计这样呢像PHP一样直接获得文章内容有多好事实上,这个设计很好。如果我们收到的数据是非法的,我可以立即检测,然后响应和断开连接。这可以避免不必要的传输成本。例如,上传图片,也许用户错误地选择一个大的可执行文件。我们不需要等到文件完全上传,只要文件头的字节数可以决定一个文件是否是一个图片。
上面提到的数据事件和结束事件是可读的事件,而这两个事件分别表示接收到的数据和数据的接收。事实上,我们已经知道可读性的使用,但许多人不知道它是可读的对象。
但是以上两个事件仅仅是可读的消费者的事件。内部是如何将数据推到可读的对象上以允许可读的来触发这些事件下面是一个例子,它创建了一个可读的对象,它会流出越来越多的数据(使用巴别塔节点)。
进口流from'stream;
var =新流,可读性强;
R. On(数据,数据= > {
console.log(数据+);
});
R. On(终端,数据= > {
console.log();
});
=(r._read)= > {
/ / console.log(在读);
};
函数的调用者(我){
如果(i < 10){
R.push(我+ '); / /只传入的字符串或对象的Buffre
{人}
R.push(空); / /当输入一个空说流传输完成,结束事件触发
}
setTimeout(被叫方,500,我+ 1);
}(0);
如果你看上面的代码,你会发现一个神奇的地方。代码覆盖_read方法。这是什么其实我也觉得这是一个坑,私人的命名样式不会是插槽,为什么不重写这个方法来实现呢如果该方法未被覆盖,则在调用推送时会引发异常:
错误:未实现
在可读性。_read(_stream_readable js:464:22)
在readable.read(_stream_readable js:341:10)
这些是可读物体的基本用途,但还有更多的陨石坑。这篇文章是最简单的介绍,我们可以学习如何创建可读的对象,可以输出数据。至于一些基本的方法,如阅读,这些也是一个不科学的设计。