一、NodeJs编码注意事项
NodeJs
中不能使用Bom
和Dom
的API
,可以使用console
和计时器API
Nodejs
中的顶级对象为global
,也可以用globalThis
访问顶级对象
二、Buffer介绍与创建
1、定义:
Buffer
中文译为【缓冲区】,是一个类似Array
的对象,用于表示固定长度的字节序列,换句话,Buffer
就是一段固定长度的内存空间,用于处理二进制数据
2、特点
Buffer
大小固定且无法调整Buffer
性能较好,可以直接对计算机内存进行操作- 每个
Buffer
的单位元素是一个字节
3、创建方式
- 使用
alloc
这是安全的创建模式、会对旧的内存数据清0
let buf = Buffer.alloc(10) //101Byte
console.log(buf)
注意:上面默认是16进制
- 使用
allocUnsafe
这是不安全的创建方式,不会对原有的内存空间数据清0,这种方式会有旧数据,比第一种快,因为不用归0
let buf_1 = Buffer.allocUnsafe(10)
console.log(buf_1)
- 使用
from
方法
可以将一个数组或者字符串转位Buffer
let buf_2 = Buffer.from('hello')
console.log(buf_2)
4、Buffer的操作与注意事项
buffer
与字符串的转换toString
let buf_3=Buffer.from([105,108,111,118,101,121,111,117])
console.log(buf_3.toString())
- 元素的读
let buf_4 = Buffer.from('hello')
console.log(buf_4[0]) //默认16进制
查看2进制
console.log(buf_4[0].toString(2))
- 元素的写
let buf_5 = Buffer.from('hello')
buf_5[0]=95;
console.log(buf_5.toString())
元素的读写都是通过[]
三、fs文件操作
文件写入
API
方法 | 说明 |
---|---|
writeFile | 异步写入 |
writeFileSync | 同步写入 |
appendFile /appendFileSync | 追加写入 |
createWriteStream | 流试写入 |
API详解
writeFile异步
语法:fs.writeFile(file,data[,option],callback)
参数说明
-
file
文件名 -
data
待写入数据 -
options
选项设置(可选) -
call
写入时回掉
返回值 undefined
代码示例
const fs = require('fs')
fs.writeFile("./test.txt","测试一下",error=>{
//error 写入失败是一个错误对象,写入成功是:null
if(error){
console.log("失败")
return;
}
console.log("写入成功")
})
writeFileSync同步写入
语法 fs.writeFileSync(file,data[,option])
参数说明
-
file
文件名 -
data
待写入数据 -
options
选项设置(可选) -
call
写入时回掉
返回值 undefined
代码示例
const fs = require('fs')
fs.writeFileSync('./data.txt',"data")
appendFile/appendFileSync追加写入
appendFile
/appendFileSync
追加写入作用是在文件尾部追加内容,语法与writeFile
/writeFileSync
语法完全相同
语法:fs.appendFile(file,data[,option],callback)
/ fs.appendFileSync(file,data[,option])
参数说明 与上面完全一样
返回值 undefined
代码演示
const fs = require('fs')
fs.writeFile("./test.txt","测试一下",error=>{
//error 写入失败是一个错误对象,写入成功是:null
if(error){
console.log("失败")
return;
}
console.log("写入成功")
})
fs.appendFile("./test.txt","测二下",error=>{
//error 写入失败是一个错误对象,写入成功是:null
if(error){
console.log("失败")
return;
}
console.log("写入成功")
})
createWriteStream 流试写入
语法:fs.createWriteStream(path[,option])
参数说明
path
文件路径options
选项配置(可选)
返回值 object
代码演示
const fs = require('fs')
const ws = fs.createWriteStream('./stream.text');
ws.write('1')
ws.write('2')
ws.close();
注意:程序打开一个文件是需要消耗资源的,流试写入可以减少打开关闭文件的次数,流试写入比较适用于大文件写入或者频繁写入的场景
writeFile
适用于写入频率低的场景
文件写入使用场景
- 下载文件
- 安装软件
- 保存程序日志
- 编辑器保存文件
- 视频录制
- 当需要持久化数据的时候应该想到文件写入
文件读取
API
方法 | 说明 |
---|---|
readFile | 异步读取 |
readFileSync | 同步读取 |
createReadStream | 流试读取 |
API详解
readFile
语法:fs.readFile(path[,option],callback)
参数说明
- path 文件路径
- options 选项配置
- callback 回调函数、、
返回值 undefined
代码演示
const fs = require('fs')
fs.readFile('./data.txt',(error,data)=>{
if(error){
console.log("失败")
return;
}
console.log("写入成功")
console.log(data.toString())
})
readFileSync
语法:fs.readFileSync(path[,option])
参数说明
- path 文件路径
- options 选项配置
返回值 Buffer
代码演示
const fs = require('fs')
const data = fs.readFileSync('./data.txt').toString()
console.log(data)
createReadStream
语法:fs.createReadStream(path[,option])
参数说明
- path 文件路径
- options 选项配置
返回值 objet
代码演示
const fs = require('fs')
const rs = fs.createReadStream('./data.txt')
rs.on('data',(chunk)=>{
console.log(chunk)
})
rs.on('end',()=>{
console.log("读取完成")
})
注意主要配合on触发事件使用
文件读取使用场景
- 电脑开机
- 程序运行
- 编辑器打开文件
- 查看图片
- 播放视频
- 播放音乐
- git查看日志
- 上传文件
- 查看聊天记录
文件移动与命名
在nodejs
中,我们可以使用rename
或renameSync
来移动或重命名文件或者文件夹
语法:fs.rename(oldPath,newPath,callback)
fs.renameSync(oldPath,newPath)
参数说明
- oldPath 文件当前路径
- newPath 文件新路径
- callback 操作后的回调
代码演示
const fs = require('fs')
fs.rename('./data.txt','./data_new.txt',(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
文件删除
在nodejs
中,我们可以使用unlink
或unlinkSync
来移动或重命名文件或者文件夹
语法:fs.unlink(path,callback)
fs.unlink(path)
参数说明
- path 文件路径
- callback 操作后的回调
代码演示
const fs = require('fs')
fs.unlink('./data.txt',(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
mkdir文件夹操作
API
方法 | 说明 |
---|---|
mkdir /mkdirSync | 创建文件夹 |
readdir /readdirSync | 读取文件夹 |
rmdir /rmdirSync | 删除文件夹 |
创建文件夹 mkdir/mkdirSync
在nodejs中使用mkdir或者mkdirSync创建文件夹
语法:fs.mkdir(path[,option],callback)
fs.mkdirSync(path[,option])
参数说明
- path 文件路径
- options 选项配置
- callback 操作后回调
代码演示
const fs = require('fs')
fs.mkdir('./test',(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
//递归创建
fs.mkdir('./test/html',{recursive:true},(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
读取文件夹 readdir/readdirSync
语法:fs.readdir(path[,option],callback)
fs.readdirSync(path[,option])
参数说明
- path 文件路径
- options 选项配置
- callback 操作后回调
代码演示
const fs = require('fs')
fs.readdir('./test',(error,data)=>{
if(error){
console.log("失败")
return;
}
console.log("成功",data)
})
读取文件夹 rmdir/rmdirSync
语法:fs.rmdir(path[,option],callback)
fs.rmdirSync(path[,option])
参数说明
- path 文件路径
- options 选项配置
- callback 操作后回调
代码演示
const fs = require('fs')
// 递归删除 -不建议
fs.rmdir('./test',{recursive:true},(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
//建议使用 rm
fs.rm('./test',{recursive:true},(error)=>{
if(error){
console.log("失败")
return;
}
console.log("成功")
})
查看资源状态
在nodejs中,我们可以使用stat或statSync来查看资源详细信息
语法:fs.stat(path[,option],callback)
fs.statSync(path[,option])
参数说明
- path 文件路径
- options 选项配置
- callback 操作后回调
代码演示
const fs = require('fs')
fs.stat('./test.txt',(error,data)=>{
if(error){
console.log("失败")
return;
}
console.log("成功",data)
})
路径
fs模块在对资源进行操作时,路径的写法有两种:
- 相对路径:例如: ../、./
- 绝对路径 例如: D:/Program/
__dirname 路径
__dirname 与require类型,都是Nodejs环境中全局变量
__dirname 保存着当前文件所在目录的绝对路径,可以使用__dirname与文件名拼接成绝对路径
在使用fs模块的时候,尽量使用__dirname将路径转化为绝对路径,这样可以避免相对路径产生的bug
__filename 路径
文件的绝对路径
path模块
API
方法 | 说明 |
---|---|
path.resolve | 拼接规范的绝对路径 |
path.sep | 获取操作系统的路径分隔符 |
path.parse | 解析路径并返回对象 |
path.basename | 获取路径的基础名称 |
path.dirname | 获取路径的目录名 |
path.extname | 获取路径的扩展名 |
代码示例
const path = require('path')
const url_1 = path.resolve(__dirname,'test.txt')
console.log(url_1)
//sep 分隔符、 windows / linux \
console.log(path.sep)
console.log(path.basename(__dirname))
console.log(path.extname(path.resolve(__dirname,'fs.js')))