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内置模块querystring中parse使用问题