菜单

核心 API

相关源文件

Node.js 提供了一套丰富的内置 API,构成了该平台应用程序开发的基础。本页概述了主要的 Node.js API 及其常见设计原则。有关特定 API 模块的详细文档,请参阅其各自的页面(文件系统HTTP 和网络加密URL 处理 等)。

API 设计原则

Node.js API 在整个平台遵循几个一致的设计原则

  1. 默认异步:大多数 API 提供异步、非阻塞版本作为其主要接口,并在适当的时候提供同步替代方案。

  2. 多种接口风格:API 通常提供多种方式来访问相同的功能

    • 基于回调的 API(传统的 Node.js 风格)
    • 基于 Promise 的 API(现代 JavaScript 风格)
    • 同步 API(用于简单操作)
  3. 错误优先回调:在基于回调的 API 中,第一个参数始终保留给错误对象(如果无错误则为 null)。

  4. 流式接口:复杂的数据操作设计为与 Node.js 流一起使用,以实现高效的内存使用。

  5. 事件驱动架构:许多组件扩展了 EventEmitter 类以处理异步事件。

来源:lib/fs.js130-148 doc/api/fs.md1-36 doc/api/stream.md8-27 doc/api/events.md11-35

核心 API 架构

Node.js 核心 API 采用分层架构,连接 JavaScript 和较低级别的系统操作。

来源:lib/fs.js42-146 src/node_file.cc57-145 lib/internal/fs/utils.js29-40 lib/internal/bootstrap/node.js1-18

API 接口模式

Node.js API 一致地实现了多种接口模式,为不同的用例提供灵活性

异步 API 模式

Node.js 支持三种主要的异步操作模式

模式示例优点缺点
回调fs.readFile(path, (err, data) => {...})传统的 Node.js 模式回调嵌套复杂度
Promisefs.promises.readFile(path).then(...)与 async/await 配合使用,更好的错误处理开销略高
同步fs.readFileSync(path)易于使用会阻塞事件循环

来源:doc/api/fs.md37-122 lib/fs.js196-252 lib/internal/fs/promises.js3-44

主要核心 API 类别

文件系统 (fs)

文件系统模块提供了一个与文件系统交互的 API,该 API 紧密模仿了标准的 POSIX 函数。

主要特性

  • 有三种变体:基于回调的(require('node:fs'))、基于 Promise 的(require('node:fs/promises'))和同步的(方法名以“Sync”结尾)
  • 提供文件 I/O、目录操作、文件监视和文件元数据的操作
  • FileHandle 对象允许对同一个文件进行更有效率的重复操作

来源:doc/api/fs.md1-36 lib/fs.js130-148 lib/internal/fs/promises.js1-112

Stream API 为处理流式数据提供了一个抽象。流可以是可读的、可写的,或两者兼有,所有流实例都是 EventEmitters。

关键流类型

  • Readable:可从中读取数据的流(例如 fs.createReadStream()
  • Writable:可向其写入数据的流(例如 fs.createWriteStream()
  • Duplex:既是 Readable 又是 Writable 的流(例如 net.Socket
  • Transform:可修改数据的 Duplex 流(例如 zlib.createDeflate()

来源:doc/api/stream.md8-45 lib/internal/streams/operators.js1-5

HTTP 和网络

Node.js 提供了一套用于网络通信的模块,其中 HTTP 是最常用的模块之一。

关键网络模块

  • http/https:HTTP 客户端和服务器实现
  • net:TCP 客户端和服务器
  • tls:TLS/SSL 实现
  • dgram:UDP/Datagram 套接字

HTTP 模块架构包含客户端和服务器组件

来源:doc/api/http.md8-38 lib/_http_server.js22-44 lib/_http_outgoing.js1-3 lib/_http_client.js1

加密

The crypto 模块提供加密功能,实现了 OpenSSL 的哈希、HMAC、加密、解密、签名和验证函数。

主要功能

  • 加密哈希(MD5、SHA-1、SHA-256 等)
  • HMAC(基于哈希的消息认证码)
  • 对称加密/解密(加密算法)
  • 非对称加密(公钥/私钥)
  • 证书处理
  • 随机数生成

来源:doc/api/crypto.md9-35 doc/api/tls.md9-54

EventEmitter

EventEmitter 是许多 Node.js API 的基础组件。它实现了观察者模式,允许对象订阅和发出命名事件。

来源:doc/api/events.md11-55

Buffer 和二进制数据

Buffer 类提供了一种在 JavaScript 运行时中直接处理二进制数据的方法。它是 Uint8Array 的一个子类,增加了用于处理二进制数据的常见用例的方法。

主要功能

  • 创建方法:Buffer.alloc()Buffer.from()
  • 缓冲区和字符串之间的编码/解码
  • 二进制数据操作方法
  • 广泛用于流、文件系统操作和网络

来源: doc/api/buffer.md9-50

通用 API 接口模式

多种接口风格

大多数 Node.js 核心模块都提供多种接口风格,以适应不同的编码模式。

文件系统示例

// Callback style
fs.readFile('/path/to/file', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// Promise style
fs.promises.readFile('/path/to/file')
  .then(data => console.log(data))
  .catch(err => console.error(err));

// Async/await with promises
async function readFile() {
  try {
    const data = await fs.promises.readFile('/path/to/file');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

// Synchronous style
try {
  const data = fs.readFileSync('/path/to/file');
  console.log(data);
} catch (err) {
  console.error(err);
}

来源:doc/api/fs.md37-122 lib/fs.js196-252 lib/internal/fs/promises.js3-44

错误处理

Node.js API 在不同的接口风格中一致地处理错误。

API 样式错误处理机制
回调回调函数的第一个参数 ((err, result) => {})
Promise拒绝的 Promise (.catch() 或带 awaittry/catch)
同步抛出的异常(必须使用 try/catch
EventEmitter'error' 事件 (emitter.on('error', (err) => {}))
'error' 事件(从 EventEmitter 继承)

来源: doc/api/events.md11-55 lib/internal/errors.js doc/api/fs.md65-95

API 废弃系统

Node.js 有一个正式的弃用机制,可以帮助开发者逐步淘汰过时的 API。

弃用类型

  1. 仅文档说明:在文档中提及,没有运行时效果
  2. 运行时警告:发出 process.on('warning') 事件
  3. 生命周期结束:API 已从 Node.js 中移除

弃用标志控制警告行为

  • --no-deprecation:静默所有弃用警告
  • --throw-deprecation:将警告转换为错误
  • --trace-deprecation:在警告时显示堆栈跟踪

来源: doc/api/deprecations.md1-50 doc/api/util.md219-327 lib/util.js1-44 lib/internal/util.js1-40

进程和全局实用程序

process 对象提供有关当前 Node.js 进程的信息和控制,而实用函数提供常用操作。

进程对象

全局 process 对象是全局对象,提供有关当前 Node.js 进程的信息和控制。

关键进程特性

  • 环境信息: process.envprocess.version
  • 标准 I/O 流: process.stdinprocess.stdoutprocess.stderr
  • 进程控制: process.exit()process.kill()
  • 事件处理: process.on('uncaughtException')process.on('exit')
  • 当前目录: process.cwd()process.chdir()

来源: doc/api/process.md9-40 src/node_process_methods.cc1-4

实用程序模块

util 模块支持 Node.js 内部 API 的需求,并为应用程序开发者提供实用函数。

关键实用程序特性

  • 格式化: util.format()util.inspect()
  • Promisification: util.promisify()
  • 弃用: util.deprecate()
  • 类型检查: 各种 isType 方法
  • 调试日志: util.debuglog()

来源: doc/api/util.md1-22 lib/util.js1-44 src/node_util.cc1-5

URL 和路径处理

Node.js 提供了处理 URL 和文件路径的模块,这对于网络和文件操作至关重要。

URL 模块

url 模块提供了 URL 解析和解析的实用程序,具有两个 API。

  • WHATWG URL 标准 API(与浏览器相同): new URL()
  • 旧的 Node.js 特定 API: url.parse()

来源: doc/api/url.md1-38

路径模块

path 模块提供了处理文件和目录路径的实用程序,并具有特定于平台的实现来处理 Windows 和 POSIX 系统之间的差异。

主要功能

  • 路径操作: path.join()path.resolve()path.normalize()
  • 路径组件: path.dirname()path.basename()path.extname()
  • 路径分析: path.isAbsolute()path.parse()path.format()

来源: lib/path.js

结论

Node.js 核心 API 遵循一致的设计模式,同时在各种领域提供强大的功能。 JavaScript 接口与原生性能相结合,为构建可扩展的网络应用程序提供了强大的平台。

理解 API 的常见模式——例如错误处理、多种接口风格和事件驱动架构——可以更容易地学习新的 Node.js API,因为这些模式在整个系统中反复出现。

要详细了解特定 API,请参阅有关 文件系统HTTP 和网络加密 以及其他核心模块的相关页面。