NodeJS常见内置模块

Posted 还是不会呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJS常见内置模块相关的知识,希望对你有一定的参考价值。

NodeJS常见内置模块

path模块

获取当前文件目录路径:__dirname.

获取当前文件路径:__filename.

路径拼接resolve和join

文件路径dirname、文件名basename、文件类型extname

var path = require("path");
var filepath = "user/node/abc.txt";
// 文件所在路径
var filedir = path.dirname(filepath);
console.log(filedir); // user\\node
// 文件名
var filename = path.basename(filepath);
console.log(filename); // abc.txt
// 文件类型(文件后缀)
var extname = path.extname(filepath);
console.log(extname); // .txt

文件系统fs模块

大多数文件操作提供了三种操作方式:

  • 同步方式,会阻塞后续代码的执行。
  • 异步回调的方式,不会阻塞后续代码执行,通过回调函数返回信息。
  • 异步promise方式,不会阻塞后续代码执行,通过then获取执行后的信息。

文件操作

读取文件信息state

获取文件描述符fd

文件描述符是文件的唯一标识,node内还存在通过文件描述符操作的API

// 同步
const fd = fs.openSync("./abc.txt");
console.log(fd);
// 异步回调
fs.open("./abc.txt", (err, fd) => {
  console.log(fd);
});
// 异步promises
fs.promises.open("./abc.txt").then((res) => {
  console.log(res);
});

读文件取文件内容

// 异步回调
fs.readFile("./abc.txt", { encoding: "utf-8" }, (err, data) => {
  console.log(data);
});
// 同步
const info = fs.readFileSync("./abc.txt", { encoding: "utf-8" });
console.log(info);
// 异步promises
fs.promises.readFile("./abc.txt", { encoding: "utf-8" }).then((res) => {
  console.log(res);
});

写文件内容

默认是对文件内容进行覆盖,追加内容则要进行配置

同意存在三种操作方式,后续示例不再做演示

fs.writeFile("./abc.txt", "你好啊,nodejs", { flag: "a+" }, (err) => {
  console.log(err);
});

文件复制

fs.copyFile("./abc.txt", "./learn_node/aaa.txt", (err) => {
  console.log(err);
});

文件夹操作

新建文件夹

fs.mkdir()、fs.mkdirSync()或fs.promises.mkdir()

fs.mkdir("./node", (err) => {
  console.log(err);
});

获取文件夹内容

支持三种操作方式

// 获取当前文件所在文件夹内的内容
fs.readdir("./", (err, files) => {
  console.log(files);
});

案例:获取传入路径下的所有文件(递归调用)

const fs = require("fs");
const path = require("path");
const fileArr = [];
function getFiles(dirPath) {
  const files = fs.readdirSync(dirPath, { withFileTypes: true });
  files.forEach((file) => {
    if (file.isDirectory()) {
      const filePath = path.resolve(dirPath, file.name);
      getFiles(filePath);
    } else {
      fileArr.push(file.name);
    }
  });
}

文件夹重命名

同样支持三种操作

fs.rename("./node", "./learn_node", (err) => {
  console.log(err);
});

events模块

events模块类似于在vue开发中使用的事件总线。发出事件,监听事件。

基本使用

// 引入的是一个类,需要对其实例化
const eventsEmitter = require("events");
const emitter = new eventsEmitter();
// 回调函数
const callback = (...args) => {
  console.log("监听到了第一个click事件,参数是:", args);
};
// 注册监听事件和回调函数,同一个事件可以多次监听
emitter.on("click", callback);
emitter.on("click", (...args) => {
  console.log("监听到了第二个click事件,参数是:", args);
});

setTimeout(() => {
  // 发出事件,和传递的参数
  emitter.emit("click", 1, 2, 3, 4);
  // 移除监听事件,需要传入对应得回调函数
  emitter.off("click", callback);
  emitter.emit("click", 1, 2, 3, 4);
}, 1000);

常见的属性

// emitter实例上注册了几种事件名称
console.log(emitter.eventNames()); 
// 对应事件,回调函数得个数
console.log(emitter.listenerCount("click"));
// 获取"click"事件得回调函数
console.log(emitter.listeners("click")); 

不常用的方法

  • emitter.once(eventNames, listenerfn); 只监听一次
  • emitter.prependListener(eventNames, listenerfn); 后面编写的监听器,放到前面先执行。
  • emitter.prependOnceListener(eventNames, listenerfn); 后面编写的监听器,放到前面先执行,只监听一次。
  • emitter.removeAllListeners([event]); 有参数,移除对应事件的全部监听。无函数,取消所有事件的监听。

以上是关于NodeJS常见内置模块的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 全局变量和内置模块

nodejs内置模块querystring中parse使用问题

nodeJS实现完整文件夹结构压缩

当尝试将变量传递给另一个模块时,将代码拆分到Nodejs中的自定义模块时,它将被定义为未定义

Python常见内置模块

在 Node.js 中使用原生 ES 模块方法解析