4.1 内置模块path
path模块用于对路径和文件进行处理,提供了很多好用的方法
并且在Mac OS、Linux和window上的路径是不一样的
- Window上会使用\或者\来作为文件路径的分隔符,目前也支持/
- 在Mac OS、Linux和Unix操作系统上使用/来作为文件路径的分隔符
4.1.1 path的常见API
从路径中获取信息;
dirname
:获取文件的父文件夹basename
:获取文件名extname
:获取文件扩展名
路径的拼接:
-
如果我们希望将多个路径进行拼接,但是不同的操作系统可能使用的是不同的分隔符
-
这个时候我们可以使用
path.join
函数
将文件和某个文件夹拼接
- 如果我们希望将某个文件和文件夹拼接,可以使用
path.resolve
- resolve函数会判断我们拼接的路径前面是否有/或…/或./
- 如果有表示是一个绝对路径,会返回对应的拼接路径
- 如果没有,那么会和当前执行文件所在的文件夹进行路径的拼接
4.2 内置模块fs
fs
是File System的缩写,表示文件系统
4.2.1 常用的API
这些API大多数都提供三种操作方式:
- 方式一:同步操作文件:代码会被阻塞,不会继续执行
- 方式二:异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取道结果时,回调函数被执行
- 方式三:异步promise操作文件:代码不会被阻塞,通过
fs.promises
调用方法操作,会返回一个promise,可以通过then、catch进行处理
const fs = require("fs");
const filepath = "./admin.txt"
// 1.同步操作:statSync返回有关给定文件路径的信息
const info = fs.statSync(filepath)
console.log('被阻塞了');
console.log(info);
// 2.异步操作
fs.stat(filepath,(err,info)=>{
if(err){
console.log(err);
return;
}
console.log(info);
})
console.log("没有被阻塞了");
// 3.promise方式
fs.promises.stat(filepath).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
console.log("没有被阻塞了");
4.2.2 文件的读写
如果我们希望对文件的内容进行操作,这个时候可以使用文件的读写:
fs.readFile(path[,options],callback)
:读取文件的内容fs.writeFile(file,data[,options],callback):在文件中写入内容
const fs = require("fs");
let content = "abcsssdd";
fs.writeFile("./admin.txt",content,{flag:"a+"},err => {
console.log(err);
})
在上面的代码中,你会发现有一个大括号没有填写任何内容,这个是写入时填写的option参数:
-
flag:写入的方式
- w 打开文件写入,默认值
- w+ 打开文件进行读写,如果不存在则创建文件
- r+ 打开文件进行读写,如果不存在那么抛出异常
- r 打开文件读取,读取时的默认值
- a 打开要写入的文件,将流(内容)放在文件末尾。如果不存在则创建文件
- a+ 打开文件以进行读写,将流放在文件末尾。如果不存在则创建文件
-
encoding:字符的编码
-
fs.readFile("./admin.txt",{encoding:'utf-8'},(err,data)=>{ console.log(data); })
-
如果读文件时,没有指定编码,文件中的数据会采用Buffer形式返回,例如:
<Buffer 61 62 63 73 73 73 64 64 e7 95 a5 e7 95 a5 e7 95 a5>
-
4.3 events模块
node中的核心API都是基于异步事件驱动的:
- 在这个体系中,某些对象(发射器(Emitters))发出某一个事件
- 我们可以监听这个事件(监听器listeners),并且传入的回调函数,这个回调函数会在监听到事件时调用
发出事件和监听事件都是听过EventEmitter
类来完成的,它们都属于events对象
emitter.on(eventName,listener)
:监听事件,也可以使用addListener
emitter.off(eventName,listener)
:移除事件监听,也可以使用removeListener
emitter.emit(eventName[,...args]):发出事件,可以携带一些参数
// EventEmitter是一个类
const EventEmitter = require("events")
const emmits = new EventEmitter()