这里有新鲜出炉的 Node.js 教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
相信接触过编程的同学应该都了解,在访问任何网页的时候,会伴随着许多的事件,例如点击菜单,移动鼠标等等。那么 node.js 是如何处理的?下面通过这篇文章就来给大家详细的介绍下 node.js 中的事件处理机制,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
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,执行代码,控制台输出如下:
控制台输出
另外,在默认情况下,针对同一个指定事件,最多可以绑定 10 个时间处理函数。可以通过 setMaxListeners 方法修改最多可以绑定的事件处理函数数量,方法如下:
- emitter.setMaxListeners(n)
EventEmitter 类的 once 方法
EventEmiiter 类的 once 方法与 on 方法类似,作用均为对指定事件绑定事件处理函数,区别在于,当事件处理函数执行一次后立即被接触,即该事件处理函数只会被执行一次。once 方法所用参数与 on 方法所用参数相同,如下:
- emitter.once(event, listener)
做个试验。
还是执行如下代码(同上):
- 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");
然后,在浏览器窗口中连续打开两次 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");
控制台输出如下:
请求处理 2 次,其余只打印 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', testFunction)
- //删除
- server.removeListener('request', testFunction)
- 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("customEvent",
- function(arg1, arg2, arg3) {
- console.log("自定义事件被触发");
- console.log(arg1);
- console.log(arg2);
- console.log(arg3);
- });
- //触发自定义事件
- server.emit('customEvent', '自定义参数1', '自定义参数2', '自定义参数3') server.listen(1337, "127.0.0.1");
这次不在浏览器窗口中输入地址,直接运行代码查看控制台输出,控制台输出如下:
控制台输出
说明我们手动触发了自定义事件,也就是 customEvent。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用 node.js 能有所帮助,如果有疑问大家可以留言交流。
(adsbygoogle = window.adsbygoogle || []).push({});
来源: http://www.phperz.com/article/17/0703/330165.html