这是看《Node.js 硬实战》写的第一个 demo
// stream.js
const Writable = require('stream').Writable;
const util = require('util');
module.exports = class MyStream extends Writable {
constructor(matchText, options) {
super();
this.count = 0;
this.matcher = new RegExp(matchText, 'ig');
}
write(chunk, encoding, cb) {
let matches = chunk.toString().match(this.matcher);
if (matches) {
this.count += matches.length;
}
if (cb) {
cb();
}
}
end() {
this.emit('total', this.count);
}
}
上面的代码写了什么?
- 用
require
方法导入了 Node.js 的两个核心模块:stream、util。 - 用
module.exports
导出MyStream
类。-
MyStream
类继承了Writable
类。 - 覆盖了父类
Writable
的两个方法_write()
、end()
。
-
// index.js
const MyStream = require('./stream');
const http = require('http');
let myStream = new MyStream('node.js');
http.get('http://chenzhongtao.cn', function (res) {
res.pipe(myStream);
})
myStream.on('total', function (count) {
console.log('test:', count);
})
那这个呢,写了什么?
- 同样的用
require
方法导入模块,其中MyStream
是我自己写的模块。 - 然后我创建了
MyStream
类的实例,并传入字符串node.js
初始化了该实例。 - 调用
http
的get()
方法,发送一个 GET 请求,返回结果丢给myStream
。 - 最后给
myStream
注册一个是事件total
,触发该事件会调用on
方法的第二个参数,这个参数是个回调函数。 - 代码