一,fs模块
1.读
fs用于文件,文件夹读写,以下是一些基本的api使用实例
const fs = require("fs");
首先,我们引入fs模块,这里用的是commonjs,也可以使用import,但是捣鼓费劲。
引入模块后,对于读写,fs提供三种方式:
第一种,同步,或者叫阻塞。
在这种模式下,代码会阻塞在读取文件这一行代码上,直至完成任务后,程序才会继续。
const res = fs.readFileSync("./test.txt", {
encoding: "utf8",
});
console.log(res);
console.log("Haha");
fs的读写均具备一个配置对象,这个对象用于设置编码方式,模式等。
第二种,异步,回调函数
在这个模式下,程序不会等待文件读取完成后才继续,而是当读取文件结束后调用一个回调函数来实现功能。
fs.readFile(
"./test.txt",
{
encoding: "utf8",
},
(err, data) => {
console.log(data);
}
);
console.log("hahah");
第三种,异步promise形式
使用fs.promise.readFile来获得一个promise对象,之后继续promise的操作(then,catch)就可以。
fs.promises
.readFile("./test.txt", { encoding: "utf8" })
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log("读取错误", err);
});
2.写
而对于写入文件的操作,fs也提供了一系列对应的函数
当然,写入一般是异步操作。
const fs = require("fs");
//假设服务端收到一些数据
const data = "name:ashto1,password:1212121";
//文件写入操作
fs.writeFile("./bcd.txt", data, { encoding: "utf8", flag: "a+" }, (err) => {
if (err) {
console.log("文件写入错误", err);
} else {
console.log("文件写入成功");
}
});
flag为模式,选用追加可读模式。
3.文件夹
fs提供了mkdir()函数来创建文件夹
fs.mkdir("./测试文件夹", (err) => {
if (err) {
console.log(err);
}
});
同样,读取文件夹内容,可以使用readdir,加入回调函数
fs.readdir("./测试文件夹", { withFileTypes: true }, (err, files) => {
console.log(files);
});
另外,fs还有rename的功能,这里就不赘述了。
二,event模块
event模块提供事件事件总线的功能,包括事件监听,事件发送。
const EventEmitter = require("events");
//实例化事件总线
const emitter = new EventEmitter();
handleLogin = (username, password) => {
console.log("已接受到数据", username, password);
};
//监听事件
emitter.on("login", handleLogin);
//发送事件
setTimeout(() => {
emitter.emit("login", "ashto", "121212");
//取消事件监听
emitter.off("login", handleLogin);
}, 1000);
在上述代码中,首先,使用EventEmitter实例化事件总线,并将监听login事件,当login事件出现,调用handleLogin,emitter.emit发送事件,支持传递参数。
event模块内容不多,主要为后面的功能奠基。
三,Buffer
在后端环境中,数据的传输主要通过二进制数据,而不是前端中的字符串。
Node引入Buffer来将数据进行转码为二进制数据(默认utf-8格式)
const buf1 = Buffer.from("ashto"); //一个字节对应一个英文字符
const buf2 = Buffer.from("测试"); //三个字节对应一个中文字符
console.log(buf1, buf2);
在转码后,Buffer的最小单元为一个字节(8bit),使用两位十六进制数进行表示。
对于英文字符,对照ASCII码。对于中文字符,一般使用三字节来表示。
除此之外,Buffer提供了一些方法来单独操作某一字节。
const buf = Buffer.alloc(8);
console.log(buf);
//访问
console.log(buf[0]);
//赋值
buf[0] = 0x66;
buf[1] = "a".charCodeAt();
console.log(buf[0]);
console.log(buf.toString());
alloc方法创建一块内存来放置字节。默认初始化为0x00。
在这里,我们使用alloc创建一份8字节的空间来操作。
charCodeAt()可以得到字符对应的字节。