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

image-20210914212427716

获取文件描述符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]); 有参数,移除对应事件的全部监听。无函数,取消所有事件的监听。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值