node.js中事件处理机制的详细说明
事件发射器类
在用于处理各种事件的Node.js的事件模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是与EventEmitter类的子类集成的实例对象。在Node.js中,为EventEmitter类定义了很多方法,所有与绑定和释放对象的事件处理函数相关的处理都依赖于调用这些方法。
事件发射器类的各种方法
事件:表示事件名称
侦听器:代表事件处理程序
括号中的参数表示该参数是可选的
方法名称和参数说明addListener(事件,侦听器)将(事件,侦听器)上的事件处理程序绑定到指定的事件和事件处理程序(addListener方法的别名)一次(事件,侦听器)指定只对指定的事件(事件,侦听器)执行一次的事件处理程序函数指定指定的事件联系事件处理程序函数setMaxListeners)的最大事件处理程序数,其中n是正值。表示最大数量的可指定事件处理程序。listeners(event)获取所有事件处理程序发出的(event,[arg1],[arg2],[.])手动触发指定事件事件发射器类的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地址,并使用response对象的end方法立即结束响应。
执行代码,然后在浏览器窗口输入:http://localhost :1337:///控制台输出如下:
控制台输出
当然,也可以通过执行多个on方法将多个事件处理函数绑定到同一个事件。如下所示:
var http=require(' http ');var server=http . CreateServer();Server.on ('request ',function (req,RES){ console . log(' client request received ')})server . on(' request ',function (req,RES){ console . log(' handle client request ')console . log(req . URL);RES . end();}) server.on ('request ',function (req,RES) {console.log('发送响应完成')}) server.listen (1337,' 127 . 0 . 0 . 1 ');好,执行代码,控制台输出如下:
控制台输出
此外,默认情况下,同一指定事件最多可以绑定10个时间处理函数。您可以修改setMaxListeners方法可以绑定的最大事件处理程序数量,如下所示:
发射器。eventemitter类的setmaxlisteners (n) once方法
event item类的once方法类似于on方法,其功能是将事件处理程序绑定到指定的事件。不同的是,当事件处理程序执行一次时,会立即被触动,也就是说,事件处理程序只会执行一次。once方法使用的参数与on方法使用的参数相同,如下所示:
一次(事件,听者)做一个实验。
或者执行以下代码(同上):
var http=require(' http ');var server=http . CreateServer();Server.on ('request ',function (req,RES){ console . log(' client request received ')})server . on(' request ',function (req,RES){ console . log(' handle client request ')console . log(req . URL);RES . end();}) server.on ('request ',function (req,RES) {console.log('发送响应完成')}) server.listen (1337,' 127 . 0 . 0 . 1 ');然后在浏览器窗口中连续打开两次127.0.0.1:1337,控制台输出如下:
它会显示两次
然后将on事件修改为once事件,代码如下:
var http=require(' http ');var server=http . CreateServer();Server.once ('request ',function (req,RES) {console.log('收到客户端请求')}) server.on ('request ',function (req,RES) {console.log('处理客户端请求')console . log(req . URL);RES . end();}) server.once ('request ',function (req,RES) {console.log('发送响应完成')}) server.listen (1337,' 127 . 0 . 0 . 1 ');控制台输出如下:
请求处理两次,剩下的只打印一次!
使用removeListener方法取消事件处理程序
代码如下:
var http=require(' http ');var server=http . CreateServer();Var testfunction=function (req,res) {console.log('发送响应完成')} 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 ',test function)//delete server . remove listener(' request ',test function)server . listen(1337,' 127 . 0 . 0 . 1 ');运行代码,在浏览器窗口输入127.0.0.1:1337,控制台输出如下
控制台输出
Emit方法:自定义事件并触发它
代码如下:
var http=require(' http ');var server=http . CreateServer();server.on('request ',function(req,RES){ console . log(req . URL);});//自定义事件server.on('自定义事件',函数(arg1,arg2,arg3) {console.log('自定义事件触发');console . log(arg 1);console . log(arg 2);console . log(arg 3);});//触发自定义事件server.emit('customEvent ','自定义参数1 ','自定义参数2 ','自定义参数3') server.listen (1337,' 127 . 0 . 0 . 1 ');这一次,不要在浏览器窗口中输入地址,而是直接运行代码来查看控制台输出。控制台输出如下:
控制台输出
说明我们手动触发了一个customEvent,也就是一个自定义事件。
摘要
以上就是本文的全部内容。希望这篇文章的内容对大家学习或者使用node.js有帮助,有问题可以留言交流。
版权声明:node.js中事件处理机制的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。