第 45 章 Node.js 常用核心模块
核心模块是被编译成二进制代码,引用的时候只需 require 即可。下面对 Node.js 中的核心模块,做简要介绍。
45.1 事件 Events
事件模块是最重要的核心模块,所有能够触发事件的对象,都是EventEmitter
类的实例。通过这个模块,我们可以建立自己的事件监听、触发和移除机制。
挂接模块
实例化一个 EventEmitter 对象
注册事件
emitter.on( 'Event_Name' , callBack_Fun )
emitter.once( 'Event_Name' , callBack_Fun ) //注册一个单次监听器,触发一次后立刻解除
触发事件
移除事件
emitter…removeListener(‘Event_Name’ , callBack_Fun)
emitter.removeAllListeners( [‘Event_Name’] ) //如果指定了事件名,就移除指定的,否则移除所有事件
一个案例:
// 引入 events 核心模块
const EventEmitter = require('events')
// 创建一个继承 events 的类
class MyEmitter extends EventEmitter {}
// 实例化 events 对象
const myEmitter = new MyEmitter()
// 使用 on 方法创建一个 play 事件及响应方法
myEmitter.on('event1',()=>{
console.log('event1 事件已被触发!')
})
// 使用 on 方法创建一个 play 事件及响应方法
myEmitter.on('event2',(a,b)=>{
console.log(`event2 事件已被触发!并且接收到了 ${a}、${b}事件参数`)
})
// 使用 emit 方法触发事件
myEmitter.emit('event1')
// 传递事件参数
myEmitter.emit('event2','a','b')
运行结果如下:
45.2 File System 模块
文件系统模块提供了标准的文件操作功能,而且,这些方法都提供异步和同步形式。强烈建议开发者使用异步版本,同步版本的文件操作会阻塞整个线程,直到操作完成为止。当然,在有必要的时候,我们必须要使用同步版本的方法。
异步操作形式始终拥有回调函数,且回调函数是最后一个参数。示例如下:
const fs = require('fs');
fs.writeFile('test.txt', 'hello fs \n', (err) =>{
if (err) { throw err;};
console.log('成功创建并写入文件');
});
45.2.1 stat 获得文件信息
stat()
方法能获得文件的详细信息,如大小、创建时间、修改时间、拥有者、群组信息、文件类型信息等等。stat()
方法的回调函数有两个参数,第一个是错误信息,第二个是 Stats 对象。
fs.stat('test.txt', (err,stats) => {
if (err) {
console.log(err)
} else {
console.log(stats)
console.log(`文件:${stats.isFile()}`)
}
})
上述代码的运行结果如下:
Stats {
dev: 39,
mode: 33188,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 1413,
size: 10,
blocks: 8,
atimeMs: 1528004135000,
mtimeMs: 1528003341000,
ctimeMs: 1528003341000,
birthtimeMs: 1528003341000,
atime: 2018-06-03T05:35:35.000Z,
mtime: 2018-06-03T05:22:21.000Z,
ctime: 2018-06-03T05:22:21.000Z,
birthtime: 2018-06-03T05:22:21.000Z }
文件:true
45.2.2 mkdir
mkdir() 方法能创建一个目录。该方法创建的目录默认值为0o777
。
45.2.3 创建文件并写入内容
fs.writeFile() 方法可以创建文件并将内容写入文件中。方法用法如下:
45.2.4 读取内容
fs.readFile() 方法可以读取文件中的内容,用法如下:
其中options
可以用来指定读取时的编码方式(默认为 null)和打开方式(默认为 r)。
45.2.5 列出目录
fs.readdir() 方法可以读取指定目录中的文件名称,并以数组的形式返回。
45.2.6 重命名
fs.rename() 方法可以重命名文件、目录名称。
45.2.7 删除目录与文件
fs.rmdir() 用来删除目录,fs.unlink() 用来删除文件。