一、Node.js的应用
1、开发服务器的应用;
2、开发工具类的应用(webpack、vite、babel);
3、开发桌面端应用(electron)。
二、Node.js命令行工具
1、c盘如何切换d盘=> d: 回车
2、查看d盘下的内容=> dir 回车
3、查看d盘下的指定文件里的内容=> cd 文件名 回车 => dir
4、当前目录:.;上一级目录:..;
5、查看文件夹下所有文件内容【包括子文件夹下的内容】 dir /s;
6、停止运行 ctrl +c;
7、Tab自动补全代码。
三、使用Node.js运行JavaScript代码
第一步:选中JavaScript文件,点击右键
第二步:输入 node JavaScript.js【文件名】并且回车
四、Node.js注意事项
1、Node.js不能使用BOM和DOM的API,可以使用console和定时器API
2、Node.js中的顶级对象为global,也可以用globalThis访问顶级对象
五、Buffer
方式一:alloc (1)会对每个元素进行二进制清零
let buf_1=Buffer.alloc(10)
console.log(buf_1);
//{
// 写入失败返回错误对象;写入成功返回null
console.log(err);
})
同步写入(无回调)(易于理解)
/**
* 新建文件:text.txt
* 在text.txt内填充内容 123
*/
// 1、导入fs模块
const fs = require('fs');
fs.writeFileSync('./text.txt',"123",err=>{
// 写入失败返回错误对象;写入成功返回null
console.log(err);
})
3、fs的文件追加写入
appendFile异步的方式
// 1、引入fs模块
const fs = require('fs')
// appendFile:在文件尾部追加内容
//2、 异步追加:fs.appendFile(file,data[,options],callback)
fs.appendFile('./text.txt',"追加的内容",err=>{
if (err) throw err;
console.log(err);//null:表示追加成功
})
appendFileSync同步的方式
// 1、导入fs模块
const fs = require("fs")
// 同步追加:fs.appendFileSync(file,data[,options])
fs.appendFileSync("./text.txt","同步导入的内容")
想要使追加的内容进行换行使用“rn”
const fs = require("fs")
fs.appendFileSync("./text.txt","rn同步导入的内容")
writeFile实现内容的追加,通过设置{flag:'a'}
使用场景:程序日志
let fs = require("fs")
fs.writeFile('./text.txt',"writeFile追加内容",{flag:'a'},err=>{
if (err) {
console.log("追加失败");
return ;
}
console.log("追加成功");
})
4、fs的流式写入
程序打开一个文件是需要消耗资源的,流式写入可以减少打开关闭文件的次数
流式写入方式适用于大文件写入或者频繁写入的场景,writeFile适合于写入频率较低的场景
// 1、导入fs
let fs = require('fs')
// 2、创建写入流对象
let ws = fs.createWriteStream('./text.txt');
// 3、写入内容
ws.write('1111111rn');
ws.write('2222222rn');
// 4、关闭通道(可写可不写)
ws.close()
5、文件写入的场景(需要持久化保存数据)
(1)下载文件
(2)安装软件
(3)保存程序日志,如Git
(4)编辑器保存文件
(5)视频录制
6、fs文件读取
异步读取
// 1、导入 fs
let fs = require("fs")
// 2、fs.readFile(path[,options],callback)
// path:文件路径;options:选项配置;callback:回调函数。
fs.readFile('./text.txt',(err,data)=>{
if (err) {
console.log("读取失败");
return;
}
console.log(data);
//
console.log(data.toString());
})
同步读取
let fs = require('fs')
let data = fs.readFileSync('./text.txt')
console.log(data.toString());
流式读取:一块一块的读取
// 1、引入fs模块
const fs = require('fs')
// 2、创建读取流对象
const rs = fs.createReadStream('./text.txt');
// 3、绑定data事件
rs.on('data',chunk=>{
console.log(chunk);
console.log(chunk.length);
});
rs.on('end',()=>{
// 提供效率
console.log("读取完成");
});
7、读取文件的应用场景
(1)电脑开机
(2)程序运行
(3)编辑器打开文件
(4)查看图片
(5)播放视频
(6)Git查看日志
(7)上传文件
8、复制文件
方式一:使用readFile
let fs = require('fs');
// 读取文件内容
let data = fs.readFileSync('./text.txt');
// 写入文件
fs.writeFileSync('./text_copy.txt',data)
方式二:使用流式操作(占用的内存空间会比方式一小)
// 1、导入fs模块
let fs = require('fs');
// 2、创建读取流对象
const rs = fs.createReadStream('./text.txt');
// 2、创建写入流对象
const ws = fs.createWriteStream('.text_copy.txt');
// 3、绑定data事件
rs.on('data',chunk=>{
ws.write(chunk)
})
9、文件的重命名
异步方式
// 1.导入fs模块
const fs = require('fs')
// 2.调用fs.rename(oldPath,newPath)方法
fs.rename("./text.txt",'./textNew.txt',err=>{
if (err) {
console.log("操作失败");
return;
}
console.log("操作成功");
})
同步方式
// 1.导入fs模块
const fs = require('fs')
// 2.调用fs.rename(oldPath,newPath)方法
fs.renameSync("./text.txt",'./textNew.txt')
批量重命名
// 1、导入fs模块
const fs = require('fs')
// 2、读取code文件夹
const files = fs.readdirSync('../t');
// 3、遍历数组
files.forEach(item =>{
// 拆分文件名
let data = item.split("-")
let [num,name]=data
// 判断
if (Number(num){
if (err) {
console.log("操作失败");
return;
}
console.log("操作成功");
})
同步的方式
// 1.导入fs模块
const fs = require('fs')
// 2.文件移动 fs
fs.renameSync('./text.txt','../node/text.txt')
11、fs文件的删除
方法一:调用unlink方法 (异步);同步使用unlinkSync
// 1、导入fs模块
const fs = require('fs')
// 2、调用unlink方法
fs.unlink('./text.txt',err=>{
if (err) {
console.log("删除失败");
return;
}
console.log("删除成功");
})
方法二:调用rm方法(异步);同步使用rmSync
// 1、导入fs模块
const fs = require('fs')
// 2、调用unlink方法
fs.rm('./text.txt',err=>{
if (err) {
console.log("删除失败");
return;
}
console.log("删除成功");
})
12、实现文件夹操作
(1)文件夹的创建
异步:fs.mkdir(path)
同步:fs.mkdirSync(path)
递归目录需要设置{recursive:true}
// 1、导入fs模块
let fs = require('fs')
// 2、创建文件夹
fs.mkdir('./newFile',err=>{
if(err){
console.log("创建失败");
return;
}
console.log("创建成功");
})
//3、递归创建目录需要设置{recursive:true},否则会报错
fs.mkdir('./a/b/c',{recursive:true},err=>{
if (err) {
console.log("创建失败");
return;
}
console.log("创建成功");
})
(2)读取文件夹
let fs = require('fs')
fs.readdir('../Buffer',(err,data)=>{
if (err) {
console.log(err);
return;
}
console.log(data);
})
(3)删除文件夹
let fs = require('fs')
fs.rmdir('./newFile',err=>{
if (err) {
console.log("删除失败");
return;
}
console.log("删除成功");
})
对应递归删除不推荐以下方法
let fs = require('fs')
// 当删除的文件里的文件夹内容不为空,即要进行递归删除,需要调用{recursive:true},否则报错
fs.rmdir('./a',{recursive:true},err=>{
if (err) {
console.log("删除失败");
return;
}
console.log("删除成功");
})
对于递归商城推荐以下方法
let fs = require('fs')
fs.rmSync('../node',{recursive:true})
13、查看资源状态
// 1、导入fs模块
const fs = require("fs");
// 2、调用fs.stat()方法
fs.stat("./text.txt", (err,data) => {
if (err) {
console.log("操作失败");
return;
}
console.log(data);
// isFile:判断是否文件
console.log(data.isFile());
// isDirectory:判断是否是文件夹
console.log(data.isDirectory());
});
14、路径
相对路径
// 1、导入fs模块
const fs = require('fs')
// 相对路径
fs.writeFileSync('./text2.txt',"text2")
fs.writeFileSync('text3.txt',"text3")
fs.writeFileSync('../text4.txt',"text4")
由于相对路径参照物:命令行的工作目录
// 绝对路径 '全局变量'保存的是:所在文件的所在目录
console.log(__dirname);
let fs = require('fs')
fs.writeFileSync(__dirname+"/text.txt","1111")
绝对路径是以盘符开头
// 1、导入fs模块
const fs = require('fs')
// 绝对路径:以盘符开头
fs.writeFileSync('D:/txt',"text")