Node的基本模块

发布于:2025-02-10 ⋅ 阅读:(38) ⋅ 点赞:(0)

一,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()可以得到字符对应的字节。