首页 > 代码库 > express源码剖析1
express源码剖析1
在通读源码之前,先把一些比较难理解的代码吃透:
1.EventEmitter.prototype
mixin(app, EventEmitter.prototype, false);
app为一个函数,也是对象。
mixin是一个类库(merge-descriptors)它就是一种mixin设计模式,作用是让app这个对象具有EventEmitter.prototype的方法。
第三个参数表示“是否重新定义app中与EventEmitter.prototype中存在重名的方法。
2.EventEmitter类
EventEmitter是nodejs中event的一个类,也是唯一类。它的核心就是事件触发与事件监听功能的封装。
3.EventEmitter实例的产生
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。
4.EventEmitter类的静态方法
4.1 newListener事件
当注册一个事件时,触发newListener事件,例如:
const myEmitter = new MyEmitter(); // Only do this once so we don‘t loop forever
//定义触发newListener事件的函数
myEmitter.once(‘newListener‘, (event, listener) => { if (event === ‘event‘) { // Insert a new listener in front myEmitter.on(‘event‘, () => { console.log(‘B‘); }); } }); myEmitter.on(‘event‘, () => { console.log(‘A‘); }); myEmitter.emit(‘event‘); //B //A
4.2 removeListener事件
对应newListener事件,当监听器被移除时,‘removeListener‘ 事件被触发。
5.EventEmitter类的静态成员
5.1EventEmitter.defaultMaxListeners
唯一的静态成员,默认值是10,表示对应监听同一的事件个数是10个,不建议修改这个参数,否则会影响到所有EventEmitter实例的。
6.EventEmitter的prototype对象
var MyEmitter = require(‘events‘); console.log(MyEmitter.prototype);
结果是:
EventEmitter { domain: undefined, _events: undefined, _maxListeners: undefined, setMaxListeners: [Function: setMaxListeners], getMaxListeners: [Function: getMaxListeners], emit: [Function: emit], addListener: [Function: addListener], on: [Function: addListener], once: [Function: once], removeListener: [Function: removeListener], removeAllListeners: [Function: removeAllListeners], listeners: [Function: listeners], listenerCount: [Function: listenerCount] } [Finished in 0.3s]
回到1,就表示app对象(函数)它具有以上方法,即app继承了EventEmitter的原型对象
express源码剖析1