NodeJS平台常用模块
NodeJS它是一个运行平台,与浏览器一样都是用于运行JavaScritp的。同理在NodeJS的平台里在,它会有一些内置的模块提供给我们使用,现阶段我们主要掌握以下三个点行了(因为这三点算是使用得非常频繁的)
首先要弄清模块它是NodejS里面自带的,它使用的是CommonJS
的规范
Path模块
console.log(__dirname); //代表当前js文件所于的目录的路径,也叫文件夹路径
console.log(__filename); //代表当前文件的路径
上面的两个内置变量是nodejs
平台下面最基本的点,也是经常使用的变量
__dirname
代表当前JS文件运行的目录的路径__filename
代表当前js文件运行的文件的路径
其中对于路径这一块nodejs
有专门的模块去处理,这个模块就是path模块,它不用我们下载,在安装nodejs
的时候就已经自带了
const path = require("path"); //导入nodejs的path模块用于处理路径问题
-
path.join()
将路径拼接起来let p1 = path.join(__dirname, "./txt"); console.log(p1);
-
path.extname()
获取某珍上路径的后缀名const path = require("path"); //extname这个方法用于获取某一个文件的后缀名(扩展名) let p1 = path.extname(__filename); //获取当前的文件的后缀名 __filename代表当前文件 console.log(p1); //同理,我现在想获取abc.txt的后面名呢 //第一步:先获取txt目录下面的abc.txt的文件路径 let p2 = path.join(__dirname, "./txt/abc.txt"); //第二步:获取后缀名 let p3 = path.extname(p2); console.log(p2); console.log(p3);
判断文件的后缀名可以方便我们后期在
express
的框架里面做文件上传的时候判断文件的类型(因为文件的类型是根据后缀名来的) -
path.isAbsolute()
判断某一个路径是否是一个绝对路径const path = require("path"); //判断某一个路径是否是绝对路径 let a = "./txt/abc.txt"; //这就是相对路径 let b = `D:\\杨标的工作文件\\班级教学笔记\\H2003\\0129\\code\\012902\\txt\\abc.txt`; //这就是绝对路径 let result1 = path.isAbsolute(a) console.log(result1); //false.说明a的路径不是一个绝对路径 let result2 = path.isAbsolute(b); console.log(result2); //true,说明b的路径是一个绝对路径
这个方法的优点还是后期在做文件上传的时候,我们存储的是一个文件的真实路径
-
path.resolve()
将一个相对路径转换成绝对路径const path = require("path"); //这个就读是将一个相对路径,转换成绝对路径 let p1 = path.resolve("./txt/abc.txt"); console.log(p1); //D:\杨标的工作文件\班级教学笔记\H2003\0129\code\012902\txt\abc.txt
FS模块
一般有了路径以后就会有文件,我们可以通过某一个路径去找到某一个文件,怎么处理呢?
在nodejs
里面,有一个模块专门用于读写文件,这个模块就是fs
模块(全称可以理解为File System
模块)
-
fs.existsSync()
判断某一个路径是否真实存在,可以判断文件夹路径,也可以判断文件路径//判断某一个文件是否存在 let p1 = path.join(__dirname, "./txt/abc.txt"); let result1 = fs.existsSync(p1); console.log(result1); //true,代表这个路径是存在的 //判断某一个文件夹是否存在 let p2 = path.join(__dirname,"./img"); let result2 = fs.existsSync(p2); console.log(result2);
-
fs.rmdirSync()
删除一个空的文件夹let p1 = path.join(__dirname, "./img"); let result1 = fs.existsSync(p1); if (result1) { //说明这个文件夹的路径是存在的 fs.rmdirSync(p1); //删除p1这个路径下面的文件夹 } else { //说明这个文件夹的路径是不存在的 console.log("这个文件夹的路径不存在"); }
注意:这里只能删除一个空的文件夹,如果文件夹里面又有文件夹,或文件夹里面有文件,则会删除失败
-
fs.unlinkSync()
根据一个文件路径删除文件let p1 = path.join(__dirname, "./img/dl.txt"); let result1 = fs.existsSync(p1); if (result1) { //现在我们删除的是一个文件,不是文件夹 fs.unlinkSync(p1); //这里的p1指的就是文件的路径 } else { console.log("这个文件不存在"); }
-
fs.copyFileSync(oldPath,newPath)
复制文件const path = require("path"); const fs = require("fs"); //要求把txt目录下面的abc.txt复制到img目录下去 let oldPath = path.join(__dirname, "./txt/abc.txt"); //旧路径 let newPath = path.join(__dirname, "./img/abc.txt"); //新路径 fs.copyFileSync(oldPath, newPath);
-
fs.renameSync(oldPath,newPath)
文件重命名let oldPath = path.join(__dirname, "./txt/abc.txt"); //旧的名子 let newPath = path.join(__dirname, "./txt/biaogege.txt"); //新的名子 if (fs.existsSync(oldPath)) { //一般在重命名之前,都要判断旧的文件是否是存在的 fs.renameSync(oldPath, newPath); } else { console.log("文件不存在") }
在文件重命名的时候,一定要检测旧的路径是否是存在的
如果在重命名的时候路径不一致的时候,这个时候就会发生剪切的现象
let oldPath = path.join(__dirname, "./txt/biaogege.txt"); //旧的路径 let newPath = path.join(__dirname, "./img/biaogege.txt"); //新的路径 //这个时候我们发现两个路径的目录是不一样的,如果我们再调用renameSync的方法,这就会发生一个剪切的现象 if (fs.existsSync(oldPath)) { fs.renameSync(oldPath, newPath); } else { console.log("文件路径不存在"); }
-
fs.mkdirSync()
根据一个路径创建一个文件夹//我们现在希望判断有当前目录下面有没有css目录,如果没有我们就创建一个 let p1 = path.join(__dirname, "./css"); //这个路径现在是不存在的 let result1 = fs.existsSync(p1); if (!result1) { //说明这个路径是不存在的 fs.mkdirSync(p1); } else { console.log("当前路径已经存在了"); }
-
fs.readdirSync()
读取某一个路径下面的文件夹内部的信息let p1 = path.join(__dirname, "./txt"); //这是当前的txt目录 //我现在就想看一下这个目录下面到底有多少文件或文件夹,怎么办呢 let arr = fs.readdirSync(p1); //这个arr就是读取的结果 console.log(arr); //[ '01.txt', '02.txt', '03.txt', '04.css', '05.html' ]
我们现在如果得到列表了,想把所有的
txt
文件全部删除掉,怎么办呢?for (let item of arr) { //第一步:把路径与之前的p1拼起来 //第二步:获取这个路径的后缀名,看它是不是.txt的 //第三步:如果是.txt的,我就把它删除掉 let tempPath = path.join(p1, item); let extName = path.extname(tempPath); if (extName == ".txt") { fs.unlinkSync(tempPath); } }
-
fs.statSync()
读取某一个路径的状态let p1 = path.join(__dirname, "./img"); //这是文件夹的路径 //在fs里面,有个方法读取文件的状态 //stat的全称可以看成是status状态 let result1 = fs.statSync(p1); //这就是第一个路径的状态 console.log(result1);
打印的结果如下
Stats { dev: 1313523609, mode: 16822, nlink: 1, uid: 0, gid: 0, rdev: 0, blksize: 4096, ino: 3940649674650349, size: 0, blocks: 0, atimeMs: 1611903580664.1223, mtimeMs: 1611903580664.1223, ctimeMs: 1611903580664.1223, birthtimeMs: 1611901490787.4097, atime: 2021-01-29T06:59:40.664Z, mtime: 2021-01-29T06:59:40.664Z, ctime: 2021-01-29T06:59:40.664Z, birthtime: 2021-01-29T06:24:50.787Z }
在上面的文件信息对象里面,有方法可以判断它是文件还是文件夹
console.log(result1.isFile()); //判断当前路径是否是一个文件 console.log(result1.isDirectory()); //判断当前路径是否是一个文件夹
案例:现在有了这个判断过程以的以后,我们可以在一个文件夹下面删除文件与文件夹了
//现在txt的目录下面有文件夹,也有文件,我如果要把下面所有的内容都删除掉,怎么办呢 const path = require("path"); const fs = require("fs"); //第一步:设置路径 let p1 = path.join(__dirname, "./txt"); //第二步:判断这个文件夹是否存在 let result = fs.existsSync(p1); if (result) { //第三步:读取这个文件夹的信息 let ps = fs.readdirSync(p1); //第四步:遍历里面的信息 for (let item of ps) { //第五步,拼接路径 let tempPath = path.join(p1, item); //第六步:读取这个路径的状态,判断是文件夹还是文件 let status = fs.statSync(tempPath); //第七步:判断是文件夹还是文件 if (status.isDirectory()) { //说明它是文件夹 fs.rmdirSync(tempPath); } else if (status.isFile()) { //说明它是文件 fs.unlinkSync(tempPath); } } }
-
fs.readFileSync()
通过一个路径去读取一个文件//第一步:准备路径 let p1 = path.join(__dirname, "./txt/yangbiao.txt"); //第二步:读取上面路径里面文本文件的内容 let result1 = fs.readFileSync(p1, { encoding: "utf8" }); console.log(result1);
-
fs.writeFileSync()
把内容写入到一个文件里面去//第一步:先准备路径,你要写到哪个文件里面去 let p1 = path.join(__dirname, "./txt/zhangsan.txt"); //这个路径默认是不存在的 //第二步:准备写入的内容 let str = `大家好啊,我是你们亲爱的标哥哥啊,帅气多金,阳光乐观`; //第三步:开始定义 fs.writeFileSync(p1, str, { encoding: "utf8" });
OS模块
os模块主要是用于获取当前操作系统的相关信息的
os.freemem()
获取当前电脑的空闲内存os.totalmem()
获取当前电脑的总内存os.cpus()
获取当前电脑的cpu信息,它返回的是一个集合os.networkInterfaces()
获取当前电脑的ip地址的信息os.platform()
获取当前电脑的平台信息os.hostname()
获取当前电脑的主机名os.homedir()
获取当前系统的主目录os.tmpdir()
获取当前系统的临时目录