第 45 章 Node.js 常用核心模块

核心模块是被编译成二进制代码,引用的时候只需 require 即可。下面对 Node.js 中的核心模块,做简要介绍。

45.1 事件 Events

事件模块是最重要的核心模块,所有能够触发事件的对象,都是EventEmitter类的实例。通过这个模块,我们可以建立自己的事件监听、触发和移除机制。

挂接模块

const EventEmitter = require('events')

实例化一个 EventEmitter 对象

class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter()

注册事件

emitter.on( 'Event_Name' , callBack_Fun )
emitter.once( 'Event_Name' , callBack_Fun ) //注册一个单次监听器,触发一次后立刻解除

触发事件

event.emit('Event_Name' , 参数 1, 参数 2);

移除事件

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')

运行结果如下:

event1 事件已被触发!
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

fs.mkdir('log',(error)=>{
    if (error) {
        console.log(error)
    } else {
        console.log('目录创建成功')
    }
})

45.2.3 创建文件并写入内容

fs.writeFile() 方法可以创建文件并将内容写入文件中。方法用法如下:

fs.writeFile(file, data[, options], callback)

45.2.4 读取内容

fs.readFile() 方法可以读取文件中的内容,用法如下:

fs.readFile(path[, options], callback)

其中options 可以用来指定读取时的编码方式(默认为 null)和打开方式(默认为 r)。

45.2.5 列出目录

fs.readdir() 方法可以读取指定目录中的文件名称,并以数组的形式返回。

45.2.6 重命名

fs.rename() 方法可以重命名文件、目录名称。

45.2.7 删除目录与文件

fs.rmdir() 用来删除目录,fs.unlink() 用来删除文件。