Node.js回调函数事件机制(EventEmitter类)全局对象
Posted 别Null.了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js回调函数事件机制(EventEmitter类)全局对象相关的知识,希望对你有一定的参考价值。
目录
Node.js的回调函数
什么是回调函数
回调函数指的就是一个函数A作为参数传递给一个参数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。
function main(info,callback){ //我是主函数,参数列表中的callback是一个回调函数
console.log('还在回家的路上');
console.log('到家了,发条消息吧');
callback(info); //调用回调函数
}
function sendMsg(msg){ //我是回调函数
console.log(msg);
}
main('亲爱的,我到家了!',sendMsg); //执行主函数
回调函数示例
const fs=require('fs'); //引入fs模块
//异步读取文件内容
fs.readFile('test.txt',function(err,data){
if(err){
return err; //读取文件失败则报错
}else{
console.log(data.toString()); //读取文件成功则输出文件内容
}
})
console.log("Node程序已经执行结束!")
执行结果
Node.js的事件机制
Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断去查询事件队列中的事件消息,然后执行该事件对应的回调函数,有点类似windows的消息映射机制。
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
在Node.js的事件机制中主要有三类角色:事件(Event)、事件发射器(EventEmitter)、事件监听器(EventListener)。
Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 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方法
当服务器接收到客户端请求时,在控制台窗口中输出客户端请求的目标地址(URL地址),并使用响应对象的end方法立即结束响应。
var http = require("http");
var server = http.createServer(); //创建服务器
server.on("request",function(req,res){ //绑定事件
console.log(req.url);
res.end("Hello World!");
})
server.listen(8080,"127.0.0.1")
在WebStorm中运行此代码,使其监听在8080端口上,打开浏览器输入127.0.0.1.8080即可运行成功。
Node.js的全局对象
Node.js的全局对象是具有全局性的,它们可在所有的模块中应用。我们并不需要在应用中引用这些对象,而可以直接使用它们。
__filename
__filename表示正在执行的代码的文件名。这时此代码文件的解析绝对路径。(当前被执行的文件的全名--->绝对路径+文件名)
例如:创建一个js文件名为t2.js,里面的代码为
console.log("文件名为:"+__filename);
__dirname
__dirname表示当前正在执行的脚本所在目录的名称。
例如:创建一个js文件名为t2.js,里面的代码为
console.log("路径名为:"+__dirname);
process对象
process
对象是 Node 的一个全局对象,提供当前 Node 进程的信息。它可以在脚本的任意位置使用,不必通过require
命令加载。该对象部署了EventEmitter
接口。
属性:process对象提供一系列属性,用于返回系统信息。
属性 | 说明 |
---|---|
process.argv | 返回一个数组,成员是当前进程的所有命令行参数 |
process.env | 返回一个对象,成员为当前Shell的环境变量 |
process.installPrefix | 返回一个字符串,表示Node安装路径的前缀 |
process.pid | 返回一个数字,表示当前进程的进程号 |
process.platform | 返回一个字符串,表示当前的操作系统,比如Linux |
process.title | 返回一个字符串,默认值为node,可以自定义该值 |
process.version | 返回一个字符串,表示当前使用的Node版本 |
方法
方法 | 说明 |
---|---|
process.chdir() | 切换工作目录到指定目录 |
process.cwd() | 返回运行当前脚本的工作目录的路径 |
| 退出当前进程 |
process.getgid() | 返回当前进程的组ID(数值) |
process.getuid() | 返回当前进程的用户ID(数值) |
process.nextTick() | 指定回调函数在当前执行栈的尾部,下一次EventLoop之前执行 |
process.on() | 监听事件 |
process.setgid() | 指定当前进程的组,可以使用数字ID,也可以使用字符串ID |
process.setuid() | 指定当前进程的用户,可以使用数字ID,也可以使用字符串ID |
process事件
process对象部署了EventEmitter接口,可以使用on方法监听各种事件,并指定回调函数。
process支持的事件还有:
data事件:数据输出输入时触发
exit事件:进程退出前触发
以上是关于Node.js回调函数事件机制(EventEmitter类)全局对象的主要内容,如果未能解决你的问题,请参考以下文章