《Node.js 硬实战》笔记

Node.js,前端 2017-11-25

这是看《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 初始化了该实例。

  • 调用 httpget() 方法,发送一个 GET 请求,返回结果丢给 myStream

  • 最后给 myStream 注册一个是事件 total,触发该事件会调用 on 方法的第二个参数,这个参数是个回调函数。

  • 代码


本文由 阿涛 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论