类似于javascript客户端代码中存在由元素触发的事件机制,在nodejs
中,也有由对象触发的事件处理机制,比如http.Server对象,就可能会触发'接收到客户端请求request'、'响应客户端请求response'、'连接错误'等各种事件。
nodejs
中常用的内置模块主要有http
、os
、path
、fs
、events
、stream
等,其中event
模块就是用来实现各种事件处理机制的。
在学习event
模块实现事件处理机制前,首先回顾下nodejs
模块的引入。在nodejs
中,可以直接使用require
函数并将模块名设置为require
函数的参数值的方法来引用模块。
可以用如下引用http
模块的代码作为示例:
const http = require('http')
这段代码使用require函数来引用http模块,该函数返回http模块对象,可以通过将该对象赋值给http变量来访问http模块中的属性和方法。
好,回顾完毕。说回主线nodejs
事件处理机制。
在nodejs
的用于实现各种事件处理的event
模块中,定义了一个EventEmitter
类,所有可能触发事件的对象都是一个继承了EventEmitter
类的子类的实例对象,EventEmitter
类中定义好了许多方法,所有与对象的事件处理函数的绑定及解除相关的处理均依靠这些方法的调用来执行。
这里请注意两点,首先
EventEmitter
类是event
模块里的类,其次EventEmitter
类中定义的与对象调用相关的方法为实例方法。这与后面要讲到的类方法是有区别的。
EventEmitter
类的实例方法:
举一个示例以作代表:
const http = require('http'); //引入http模块并赋值给http变量
const server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
//为server服务器在接收到客户端发来请求时q触发的request事件绑定事件处理函数
server.on('request', function(req, res){
console.log(req.url);
res.end();
});
server.listen(8000, '127.0.0.1')
EventEmitter
类方法有两种:newListener
事件与removeListener
事件。
当对继承了EventEmitter
类的子类的实例对象进行绑定事件处理函数时,都会触发EventEmitter
类的newListener
事件。
以下为示例代码:
emitter.on('newListener', function(e, f){
//事件处理函数代码
//参数e为被绑定的事件名
//参数f为被绑定的事件处理函数
})
而当对继承了EventEmitter
类的子类的实例对象进行取消事件处理函数时,都会触发EventEmitter
类的removeListener
事件。示例同上,只是参数e和f分别为被取消事件处理函数的事件名和事件处理函数,就不重复举例了。