当前位置: 首页 > news >正文

【Node.js】Node.js 模块系统

💡 问题 1:为什么是 require('fs').promises,而不是 Promise

✅ 背景

Node.js 的 fs 模块原本是基于回调函数的设计,比如:

fs.readFile('a.txt', (err, data) => {...})

后来 Node.js 官方觉得回调写法太麻烦,于是新增了一个更现代的 Promise 风格 API,方便配合 async/await 使用。

但为了 兼容旧代码,官方没有直接改原来的 fs,而是:
👉 在 fs 模块里额外提供了一个 .promises 子对象。

所以:

const fs = require('fs');          // 原始版本:回调风格
const fsP = require('fs').promises; // 新版本:Promise 风格

这两个其实是同一个模块的两种接口风格
promises 只是表示「这是 Promise 版本的 fs」。


📘 举例对比:

传统(回调)写法

const fs = require('fs');
fs.readFile('data.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});

Promise(现代)写法

const fs = require('fs').promises;
const data = await fs.readFile('data.txt', 'utf8');
console.log(data);

.promises 没有特殊魔法,只是官方为了区分不同风格的 API 而加的命名。
在本质上,Node.js 的 promises 和浏览器的 Promise 是同一个概念。

💡 问题 2:为什么要 .toString()?

这是很多刚从前端转 Node 的人都会疑惑的点。

✅ 原因是:

fs.readFile() 默认返回的是一个 Buffer 对象,不是字符串!

❓什么是 Buffer?

在浏览器里,我们读写的文件、数据几乎都是字符串(text)。
但 Node.js 是面向服务器的,它必须能高效处理各种二进制数据(图片、视频、文件流、网络数据包等)。

所以 Node.js 引入了一种特殊的数据结构 —— Buffer(缓冲区):

它存的是二进制数据(0 和 1);

类似前端的 Uint8Array;

可以高效读写、复制、传输。

📘 举例:
const fs = require(‘fs’);

const data = fs.readFileSync(‘test.txt’);
console.log(data);

输出可能是这样:

<Buffer 48 65 6c 6c 6f 20 4e 6f 64 65 2e 6a 73>

这是一堆十六进制数,代表文件内容的二进制形式。
如果你想把它当作字符串看,就要手动转成文本:

console.log(data.toString());

输出:

Hello Node.js

✅ 更优雅的做法:

其实在读取文件时可以直接指定编码格式,让它自动转换为字符串:

const text = fs.readFileSync(‘test.txt’, ‘utf8’);
console.log(text);

这样 Node.js 会自动帮你 .toString(‘utf8’),不用手动转了。

http://www.dtcms.com/a/535833.html

相关文章:

  • 古籍影文公开古籍OCR检测数据集VOC格式共计8个文件
  • 网站的对比哪些网站是做免费推广的
  • 网站建设的整体流程有哪些?建筑工程网站建站方案
  • 区块链的密码学基石:沙米尔秘密共享(SSS)数学原理详解
  • 单例模式详解:从基础到高级的八种实现方式
  • 改版网站收费wordpress国人主题
  • web3.0是什么
  • 计网:网络层
  • git学习3
  • HarmonyOS图形图像处理与OpenGL ES实战
  • SunX:以合规正品,重塑Web3交易信任
  • nacos 使用oceanbase(oracle模式)作为数据源
  • 网站排名优化策划网站一个人可以做吗
  • 基于springboot的民宿在线预定平台开发与设计
  • 脚本探索--Spatial HD进行CNV分析
  • 介绍一下Hystrix的“舱壁模式”和“熔断状态机”
  • 基数排序(Radix Sort)算法简介
  • 【C++项目】基于设计模式的同步异步日志系统(前置基础知识)
  • JDK8时间相关类,时间对象都是不可变的
  • Java内存模型(JMM)与JVM内存模型
  • h5响应式网站模板如何做公司自己的网站首页
  • CentOS7 使用 centos-release-scl-rh yum库安装 devtoolset
  • UI自动化测试:Jenkins配置
  • 软件开发公司网站模板网站开发工程师绩效
  • c++中list详解
  • 杨凌美畅用 TDengine 时序数据库,支撑 500 条产线 2 年历史数据追溯
  • 4.Rocky Linux 网络配置
  • <数据集>yolo螺丝螺母识别数据集<目标检测>
  • Visual Studio 2022 安装使用:Entity Framework Core
  • Oracle 19c 备份技术教学文档