学习笔记

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总结

  1. Buffer用于处理二进制数据,核心方法包括Buffer.alloc和Buffer.from,注意初始化避免安全隐患。
  2. fs模块支持文件增删改查,推荐使用fs/promises接口,流式操作适合大文件处理。
  3. path模块提供跨平台路径处理方法,常用path.join和path.resolve,避免手动拼接路径导致错误。
  4. 学习重点在于掌握Node.js底层API,如Buffer、fs和path,为后续开发打下坚实基础。
  5. 注意异步操作中的错误处理及路径处理的兼容性问题,确保代码在不同平台稳定运行。