node核心模块

510 阅读2分钟
  1. Events模块简介 node的特性:单线程 异步 非阻塞I/O 基于事件驱动的运行在服务器端轻量、高效的脚本语言; Events模块是nodejs的核心模块,是node实现事件驱动的基础,node中几乎所有的模块(如http, fs等)都继承该模块; Events模块实现了事件注册,通知等功能,是观察者模式(事件发布/订阅模式)的实现; 只要继承EventEmitter类,就可拥有事件注册、触发事件等,所有能触发事件的对象都是EventEmitter类的实例, 例如: net.Server 对象会在每次有新连接时触发事件; fs.ReadStream 会在文件被打开时触发事件; 流对象 会在数据可读时触发事件; 创建一个新类, 使支持 EventEmitter 事件 eg1: 借助util模块 let EventEmitter = require('events'); let util = require('util'); function WriteStream () { EventEmitter.call(this); //继承私有属性 } util.inherits(WriteStream, EventEmitter); //原型继承,继承公有 /**
    • 定义一个WriteStream类,把EventEmitter类的方法添加到新创建的WriteStream 类中,使WriteStream的实例具有EventEmitter的方法。
    • 相当于:
    • Object.setPrototypeOf(ctor.prototype, superCtor.prototype); //指定的对象的原型
    • ctor.prototype.proto = superCtor.prototype; */ eg2: 借助es6 extends方法 const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () { console.log('触发了一个事件了'); }); myEmitter.emit('event'); //触发事件 当我们订阅了'event'事件后,可以在任何地方通过emit('event')来执行事件回调; 相关api:
  2. 导入模块(创建emitter实例) var EE = require('events'); //events模块只提供了一个EventEmitter类,所以返回的就是EventEmitter
  3. 注册绑定事件 EE.addListener(event, listener); EE.on(event, listener); //相当于增加观察者,addListener和on这两个方式作用是一样的 EE.once(event, listener); //绑定的事件监听器只会执行一次,然后就会被删除掉 //添加了任意的监听函数时会触发newListener EE.on('newListener', (type, listener) => { }); EE.on('removeListener');
  4. 触发事件 EE.emit(event);
  5. 移除事件 EE.removeListener(event, listener); EE.removeAllListeners([event]); //移除所有
  6. 其它api EE.setMaxListeners(n); //设置同一事件的监听器最大绑定数,默认情况下,超过10个就会警告;设置为0,是无限制; EE.listenerCount() //查看事件监听器数量