学习笔记 Gobi cowboy
Nodejs学习笔记(一)
#Node.js
#Buffer
#fs模块
#path模块
#文件操作
🔹 一、Buffer 缓冲区
Buffer 是处理二进制数据的内存区域,常用于文件读写、TCP流等操作。
核心方法:
- Buffer.alloc(size):创建指定大小的空 buffer。
- Buffer.from(data):将字符串、数组等转成 buffer。
简单理解:
Buffer 是内存中的原始数据块,是 Node.js 操作文件、流的底层接口。
✅ 进阶点:
- Buffer 是 Node 操作“底层二进制数据”的关键。比如 TCP 网络通信、流式文件处理、图片/视频数据传输都会用到它。
- 实际工作中常与 Stream 模块组合使用,比如处理大文件分片上传、音视频传输等。
⚠️ 易踩坑:
- 默认创建 Buffer 时如果不初始化(比如用 Buffer.allocUnsafe()),可能包含旧数据,存在安全隐患。
- Buffer 的大小是固定的,如果用完再写入,会溢出或截断。
🔹 二、fs 模块(文件系统)
用于对文件/目录进行 增删改查,支持同步与异步方式。
🟢 增(写入):
fs.writeFile(path, data, options, callback); // 异步写入
fs.writeFileSync(path, data); // 同步写入
fs.appendFile(path, data, callback); // 异步追加
const stream = fs.createWriteStream(path); // 创建写入流
stream.write(data);
🔴 删(删除):
fs.unlink(path, callback); // 异步删除
fs.unlinkSync(path); // 同步删除
🟡 改(重命名):
fs.rename(oldPath, newPath, callback);
fs.renameSync(oldPath, newPath);
🔍 查(读取):
fs.readFile(path, options, callback); // 异步读取
fs.readFileSync(path, options); // 同步读取
fs.createReadStream(path); // 创建读取流
fs.stat(path, callback); // 获取文件信息
✅ 进阶点:
- fs/promises 是 Node 14+ 提供的 Promise 版接口,更适合现代 async/await 写法,推荐使用。
- fs.watch() 可监听文件变化,但在大型项目中更推荐用 chokidar,它性能更好、更稳定。
- 流式写入 (fs.createWriteStream) 在处理大文件(>几十 MB)时远比一次性读写效率高。
⚠️ 易踩坑:
- 回调版 API 中,错误处理一定不能漏写,比如 fs.readFile(path, (err, data) => { if (err) throw err })
- 写文件前要判断目录是否存在,否则会报错;可用 fs.mkdir({ recursive: true }) 递归创建目录。
🔹 三、path 模块(路径处理)
用于进行文件路径的跨平台兼容处理。
常用方法:
* path.isAbsolute(path):判断是否为绝对路径。
* path.join(...paths):路径拼接,自动添加分隔符。
* path.resolve(...paths):生成绝对路径。
* path.sep:当前系统的路径分隔符(如 Windows 为 \\,Unix 为 /)。
✅ 进阶点:
- 在开发跨平台 Node 应用(如 Electron、打包工具、CLI 脚本)时,path.join() 和 path.resolve() 是构建文件路径的保险锁。
- __dirname 和 path.resolve() 的组合是动态定位资源路径的利器。
⚠️ 易踩坑:
- 不要用字符串拼接路径:‘folder’ + ’/’ + ‘file.txt’ 在 Windows 上会出错。
- path.resolve() 是从右往左拼接+规范化,遇到 / 绝对路径就停止;而 join() 是纯拼接+规范化,不会终止。
✅ 小结
今天的重点是熟悉 Node.js 中如何使用底层 API 操作文件与路径。虽然内容不多,但每个模块都非常重要,属于“基础打桩”阶段。
AI总结
- Buffer用于处理二进制数据,核心方法包括Buffer.alloc和Buffer.from,注意初始化避免安全隐患。
- fs模块支持文件增删改查,推荐使用fs/promises接口,流式操作适合大文件处理。
- path模块提供跨平台路径处理方法,常用path.join和path.resolve,避免手动拼接路径导致错误。
- 学习重点在于掌握Node.js底层API,如Buffer、fs和path,为后续开发打下坚实基础。
- 注意异步操作中的错误处理及路径处理的兼容性问题,确保代码在不同平台稳定运行。