node.js中的事件处理机制详解

2020-06-17 07:03:39易采站长站整理

EventEmitter类

在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在Node.js中,为EventEmitter类定义了许多方法,所有与对象的事件处理函数的绑定及解除相关的处理均依靠这些方法的调用来执行。

EventEmitter类的各种方法

event:代表事件名

listener:代表事件处理函数

中括号内的参数代表该参数为可选参数

方法名与参数描述
addListener(event,listener) 对指定事件绑定事件处理函数
on(event, listener) 对指定事件绑定事件处理函数(addListener方法的别名)
once(event, listener) 对指定事件指定只执行一次的事件处理函数
removeListener(event, listener) 对指定事件接触事件处理函数
setMaxListeners(n) 指定事件处理函数的最大数量,n为正数值,代表最大的可指定事件处理函数的数量
listeners(event) 获取指定事件的所有事件处理函数
emit(event, [arg1], [arg2], […]) 手工触发指定事件

EventEmitter类的on方法


var http = require("http");
var server = http.createServer();
server.on("request", function(req, res){
console.log(req.url);
res.end();
});
server.listen(1337, "127.0.0.1");

在这段代码中,我们指定当服务器接收到客户端请求时,在你控制台窗口中输出客户端请求的目标的URL地址,并使用响应对象的end方法立即结束响应。

执行代码,然后在浏览器窗口中输入:http://localhost:1337://,控制台输出如下:


控制台输出

当然,也可以通过多个on方法的执行来对同一个事件绑定多个事件处理函数。如下:


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){
console.log('接收到客户端请求')
})

server.on("request", function(req, res){
console.log('处理客户端请求')
console.log(req.url);
res.end();
})

server.on('request', function(req, res){
console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

OK,执行代码,控制台输出如下: