专栏首页前端一会nodejs的事件处理机制

nodejs的事件处理机制

类似于javascript客户端代码中存在由元素触发的事件机制,在nodejs中,也有由对象触发的事件处理机制,比如http.Server对象,就可能会触发'接收到客户端请求request'、'响应客户端请求response'、'连接错误'等各种事件。

nodejs中常用的内置模块主要有httpospathfseventsstream等,其中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类的实例方法:

  • addListener(event, listener) / on(event, listener) 对指定事件绑定事件处理函数
  • once(event, listener) 对指定事件只执行一次的事件处理函数
  • removeListener(event, listener)
  • removeAllListeners([event])
  • setMaxListeners(n) 指定事件处理函数的最大数量。n为整数值
  • listeners(event) 获取指定事件的所有事件处理函数
  • emit(event, [arg1], [arg2], […]) 手工触发指定事件

举一个示例以作代表:

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分别为被取消事件处理函数的事件名和事件处理函数,就不重复举例了。

本文分享自微信公众号 - 前端小二(frontendxiao2),作者:小二君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nodejs创建http客户端及代理服务器

    nodejs除了可以通过http模块创建服务器,还能创建客户端,类似于浏览器那样很轻松的去向别的服务器发送请求并获取响应数据。

    前端_AWhile
  • 《Node.js权威指南》:如何创建HTTP服务器

    在nodejs中可以很方便的创建服务器。nodejs提供了http模块和https模块,分别用于创建http服务器与http客户端、https服务器和https...

    前端_AWhile
  • jQuery源码研究:模块规范兼容

    从jq官网down下最新的未压缩版代码并打开后,首先看下整体,这就是一个大型的自执行的匿名函数:

    前端_AWhile
  • Nodejs创建http客户端及代理服务器

    nodejs除了可以通过http模块创建服务器,还能创建客户端,类似于浏览器那样很轻松的去向别的服务器发送请求并获取响应数据。

    前端_AWhile
  • scrapy设置代理ip

    版权信息所有者:chenjiabing 如若转载请标明出处:chenjiabing666.github.io6

    爱撒谎的男孩
  • 真正“搞”懂http协议01—背景故事

    zaking
  • Node核心模块篇:HTTP

    HTTP协议是世界上广泛使用的应用层通信协议,而通过Node的核心模块HTTP,我们可以方便快速的构建自己的HTTP服务器和客户端,并在两者之间进行通信传递数据...

    凌虚
  • 「安全工具」57个开源应用程序工具:免费应用程序安全软件指南

    您无需花费大量资金在应用程序开发和交付日程中引入高功率安全性。这本开源应用程序工具指南旨在帮助那些希望投资应用程序安全软件的团队了解开源领域的内容,以及如何思考...

    首席架构师智库
  • Go语言经典库使用分析(四)| Gorilla Handlers 源代码实现分析

    上一篇 Go语言经典库使用分析(三)| Gorilla Handlers 详细介绍 中介绍了Handlers常用中间件的使用,这一篇介绍下这些中间件实现的原理...

    飞雪无情
  • 基于select IO复用的HTTP服务器(十一)

    没想到距离上篇文章才过去仅仅半个多月就发生了这么多的事情,其之沉、其之重、其之殇,如氤氲般笼罩环绕在这片古老的大地上。钟南山眼中的泪水让我没有丝毫的心情再在文章...

    老李秀

扫码关注云+社区

领取腾讯云代金券