返回专题列表

TOPIC · NODE.JS

Node.js 专题

从运行时机制、异步模型、工程实践到服务开发与工具化,按章节顺序整理的系统学习内容。

专题概览

40 篇 · 持续维护

适合按章节顺序连续阅读,也可以按阶段挑选当前最需要的部分进入。

  • Node.js
  • 后端开发
  • 工程实践
从第一篇开始

STAGE

基础建立

第 01 篇11 分钟

开篇:用正确的方式学习 Node.js

Node.js 往往被误解成“会写一点 JavaScript 就能顺手做后端”。这种说法不能算错,但它只说中了最表面的那一层。真正决定你能不能把 Node.js 用好的,从来不只是语法熟不熟,而是你是否理解它作为一个运行时到底提供了什么能力、适合解决什么问题,以及为什么它在工程实

第 02 篇9 分钟

工欲善其事:nvm、npm、pnpm、Corepack 与开发环境搭建

真正影响 Node.js 开发体验的,往往不是语法本身,而是环境。你到底在用哪个 Node 版本、依赖是由谁安装的、项目默认依赖哪一个包管理器、编辑器是否知道当前工作区的运行时,这些问题只要有一处不清楚,后面就很容易出现“终端能跑、编辑器报错”“昨天能装、今天装不上”“换台机器就

第 03 篇8 分钟

进入 Node 的世界:REPL、脚本执行、全局对象与运行上下文

很多人第一次接触 Node.js,就是在终端里敲下一行 `node index.js`。从结果上看,这件事似乎非常直接:写一个文件,跑一个文件,终端给你打印结果。但如果只停留在“能跑起来”这个层次,后面你很快就会在 REPL、模块执行、全局变量、路径信息和运行上下文这些地方反复困

第 04 篇9 分钟

模块系统入门:CommonJS、ESM 与加载规则

Node.js 最容易让人反复踩坑的知识点之一,就是模块系统。`require` 和 `import` 为什么会同时存在?同样是一个 `.js` 文件,为什么在不同项目里行为会不同?为什么有时候 `__dirname` 可用,有时候又突然报错?这些问题看起来分散,背后其实都指向同

第 05 篇9 分钟

与操作系统交互:process、path、fs、url 的基础能力

Node.js 的价值之一,在于它不只是“能跑 JavaScript”,而是能直接和操作系统打交道。路径、文件、命令行参数、环境变量、退出状态,这些在浏览器世界里要么不存在、要么几乎碰不到的东西,在 Node.js 里反而都是日常能力。

第 06 篇5 分钟

数据与输入输出:Buffer、编码、stdin stdout、命令行参数与退出码

浏览器里的 JavaScript 很少要求你直接面对二进制数据、标准输入输出和进程退出状态,但在 Node.js 里,这些能力都是日常基本功。你写文件处理脚本、实现上传下载、封装命令行工具、与其他程序通过管道协作,最后都会落到 `Buffer`、编码、`stdin / stdou

STAGE

核心机制

第 07 篇6 分钟

异步编程入门:回调、Promise 与 async await 的演进

理解 Node.js,绕不开异步编程。很多人会写 `async / await`,但一旦遇到回调 API、并发控制、错误传播或执行顺序问题,就容易再次混乱。真正重要的不是某一种写法有多新,而是你能否理解 Node.js 为什么必须组织等待、以及这种等待是如何一步步被抽象得更清楚的

第 08 篇5 分钟

Node 为什么快:事件循环、IO 模型与非阻塞思维

“Node.js 很快”几乎成了介绍它时的固定话术,但这句话如果不拆开讲,就很容易变成空话。Node.js 不是在所有场景都快,也不是因为“JavaScript 天生快”。它真正擅长的,是高并发 I/O 场景下对等待时间的组织能力。

第 09 篇5 分钟

调度细节别再糊涂:setTimeout、setImmediate、process.nextTick 与微任务

Node.js 里最容易让人“看起来懂了,实际一写就错”的地方,就是各种任务队列和回调调度顺序。`setTimeout`、`setImmediate`、`process.nextTick`、`Promise.then` 看起来都像“稍后执行”,但它们的优先级和进入时机并不一样。

第 10 篇5 分钟

事件驱动核心:EventEmitter 的机制、约束与常见坑

Node.js 的很多核心能力都离不开事件驱动。无论是流、网络连接、进程管理,还是很多框架内部机制,背后经常都能看到 `EventEmitter` 的影子。它之所以重要,不是因为 API 很难,而是因为它代表了一种非常典型的 Node 思维:当状态变化发生时,不直接把所有逻辑写死

第 11 篇3 分钟

流的世界(上):Readable、Writable 与背压机制

如果说事件驱动体现了 Node.js 的编程风格,那么流则体现了 Node.js 处理数据的方式。很多人会用文件流,却没有真正理解“为什么要流式处理”和“背压”到底在解决什么问题。这一篇先把 `Readable`、`Writable` 和背压心智讲透。

第 12 篇4 分钟

流的世界(下):Transform、pipeline 与文件网络处理

流真正强大的地方,不只是“边读边写”,而是你可以在数据流动过程中不断转换、过滤、拼装,并把多个阶段安全地串在一起。这一篇会把 `Transform`、`pipeline` 和文件网络场景下的流式处理联系起来。

第 13 篇4 分钟

错误不可怕:同步异常、异步拒绝与全局错误边界

Node.js 项目真正难维护的地方,往往不是成功路径,而是失败路径。同步异常、Promise 拒绝、流错误、进程级异常看起来都属于“报错”,但它们所在的层次和处理方式并不一样。这一篇会把错误边界真正分层说明白。

第 14 篇4 分钟

网络编程基础:HTTP、HTTPS、Fetch、TCP 与 UDP 初识

虽然大多数业务项目会直接使用框架,但如果不理解 Node.js 原生的网络能力,就很难真正理解请求生命周期、连接复用和协议差异。这一篇会从 HTTP 起步,再逐步拉到 TCP 和 UDP 的视角。

第 15 篇4 分钟

并发能力进阶:child_process、cluster 与 worker_threads 到底怎么选

Node.js 常被说成“单线程”,但这句话如果不展开,很容易误导。Node.js 在进程、线程和任务分发上其实提供了多种能力,只是它们各自解决的问题并不一样。这一篇会把 `child_process`、`cluster` 和 `worker_threads` 的选型边界讲清楚。

第 16 篇3 分钟

调试与诊断基础:Inspector、日志、性能剖析与线上排障

理解 Node.js 机制并不等于真的会排查 Node.js 问题。真正到项目里,更多时候你面对的是慢请求、内存涨高、日志断点、偶发错误和线上复现困难。这一篇会把调试与诊断能力作为运行时阶段的收束。

STAGE

工程实践

第 17 篇3 分钟

管好你的依赖:package.json、SemVer、lockfile 与依赖边界

Node.js 项目之所以容易“今天能跑,明天失灵”,很多时候不是业务代码问题,而是依赖边界没有管好。`package.json`、版本范围、锁文件、开发依赖和生产依赖这些看起来基础的东西,实际决定了项目能不能稳定协作。

第 18 篇4 分钟

npm scripts 不是玩具:脚本编排、环境切换与团队协作

很多团队的 Node.js 项目最终都会把大量协作动作沉淀到 `npm scripts` 里,但很多人只把它当成“几个命令别名”。实际上,它往往是项目工程化的统一入口。这一篇会把脚本编排、环境切换和团队协作放到一起理解。

第 19 篇3 分钟

如何组织一个 Node 项目:脚本、库、服务与 Monorepo 的取舍

Node.js 项目既可能是一个十几行脚本,也可能是一个大型服务端系统或多包仓库。不同规模、不同目标的项目,目录结构和职责拆分方式并不一样。这一篇会把脚本型项目、库项目、服务项目和 Monorepo 的组织思路放到同一张图里看。

第 20 篇4 分钟

配置管理实践:环境变量、配置分层与密钥边界

Node.js 项目中最容易慢慢变脏的地方之一,就是配置。最开始只有一个端口号,后来多了数据库地址、第三方密钥、功能开关、环境切换,最后所有内容都挤在一个文件里。配置管理做得好不好,直接决定项目能不能稳定进入不同环境。

第 21 篇6 分钟

让代码更可靠:ESLint、Prettier、类型检查与提交前校验

Node.js 项目的稳定性从来不是靠“大家自觉一点”维持的,而是靠工具把约束变成默认流程。格式化、Lint、类型检查和提交前校验,看起来像外围工具,实际上是协作型项目的基本护栏。

第 22 篇5 分钟

测试 Node 应用:单元测试、集成测试、接口测试与 mock 策略

Node.js 项目越往服务端和工具化走,测试越不是可有可无的附加项。真正难的不是“会不会写断言”,而是知道哪些地方该测、怎么隔离依赖、哪些场景要真实联动、哪些场景该 `mock`。这一篇会从测试分层开始把思路梳理清楚。

第 23 篇3 分钟

性能与内存行为:阻塞点、事件循环延迟、堆内存与 GC 观察

很多 Node.js 问题表面上是“服务变慢了”,但真正的根因可能是阻塞调用、事件循环延迟、对象堆积或者垃圾回收压力。性能优化不是靠猜,而是靠理解运行时行为和证据分析。这一篇会把 Node.js 常见性能话题放到工程视角里理解。

第 24 篇5 分钟

从本地代码到可复用工具:CLI、bin、发布 npm 包与版本管理

Node.js 不只是服务端运行时,它同时也是非常强的工具链运行时。很多团队内部脚本和开源工具,最后都会演变成可以安装、执行和发布的 CLI 包。这一篇会把 Node.js 从“写给自己用”走向“交给别人用”的那一步讲清楚。

STAGE

服务开发

第 25 篇5 分钟

从原生 HTTP 到框架选择:Express、Koa、Fastify 与 NestJS 的取舍

真正做 Node.js 服务端时,你几乎不可能长期停留在原生 HTTP 层,但如果不了解框架解决了什么问题,也很难做出合理选择。这一篇会从原生能力起步,对比 `Express`、`Koa`、`Fastify` 和 `NestJS` 的思路差异与使用边界。

第 26 篇5 分钟

中间件机制与请求生命周期:一次请求在 Node 服务里经历了什么

很多 Node.js 框架虽然语法不一样,但几乎都离不开“中间件”这个概念。真正理解中间件,不是会写一个打印日志的函数,而是理解请求从进入服务到返回响应,中间到底经历了哪些阶段。这一篇会把一次请求的生命周期完整串起来。

第 27 篇5 分钟

一个 Node API 应该怎么拆:路由层、服务层、仓储层与 DTO 边界

Node.js 服务端项目最容易越写越乱的地方,不是框架本身,而是职责边界。参数解析、业务规则、数据库访问、响应组装如果都堆在路由函数里,项目规模一上来很快就失控。这一篇会把常见分层方式放到同一个语境里说明白。

第 28 篇5 分钟

接口设计基础:资源命名、状态码、分页结构与错误响应统一

一个 API 项目是否顺手,并不完全取决于框架,而是取决于接口设计是否一致。字段名乱、状态码随意、分页结构不统一、错误响应风格不一致,这些问题会快速放大前后端协作成本。这一篇会把最基础也最常见的接口设计问题集中梳理出来。

第 29 篇5 分钟

数据校验与契约协作:Schema 校验、序列化与输入输出模型

API 能收到数据不代表接口就是稳定的。真正可靠的服务端项目,一定会认真区分“外部输入是否合法”“内部业务是否允许”“最终响应应该长什么样”。这一篇会把 Schema 校验、序列化和输入输出模型放到一起讨论。

第 30 篇3 分钟

数据持久化基础:SQL 与 NoSQL、ORM、Query Builder 与事务边界

服务端项目只要进入真实业务,就绕不开数据持久化。但“会连数据库”不等于“知道该怎么设计数据访问层”。这一篇会从数据库类型、访问方式和事务边界入手,帮助读者建立最基础的后端持久化认知。

第 31 篇4 分钟

身份认证与权限控制:Session、JWT、RBAC 与常见安全问题

只要服务端项目对外开放,认证与权限几乎就绕不过去。真正难的地方从来不是会不会签发 token,而是知道用户身份、会话状态、权限判定和安全边界分别应该落在哪一层。这一篇会把认证与授权主线系统串起来。

第 32 篇5 分钟

文件上传与静态资源处理:磁盘、对象存储、图片处理与安全边界

文件上传通常是服务端项目里最容易“先糊上去,后面再补”的功能,但它其实牵涉到磁盘、网络、资源访问、内容校验和安全边界。Node.js 在这类场景里很有优势,但也很容易因为处理不当留下隐患。这一篇会把文件处理主线系统讲清楚。

第 33 篇5 分钟

缓存、队列与后台任务:Redis、消息队列、Cron 与异步任务编排

服务端项目一旦进入真实业务,很多工作就不应该继续同步阻塞在请求链路里了。缓存、队列和后台任务的本质,都是把“何时做”“在哪里做”“是否立刻返回”这些问题重新组织。这一篇会把几类典型异步基础设施放到统一视角中理解。

第 34 篇5 分钟

实时通信入门:WebSocket、SSE 与长连接场景实践

当业务开始要求“服务端主动推消息”时,普通的请求响应模型就不够用了。Node.js 在实时通信场景下很常见,但很多人第一次接触 WebSocket 时只记住了 API,却没有真正建立连接模型和场景边界。这一篇会从长连接思维出发,把几类实时通信方式做一轮对比。

第 35 篇5 分钟

把服务真正跑起来:日志、监控、Docker、进程守护与上线检查

很多教程写到接口通了就结束了,但真正的服务端工程,难点往往在“怎么把它持续跑起来”。部署、日志、监控、容器化和进程守护,并不是上线前最后随手补一下的步骤,而是交付能力的一部分。这一篇会把上线相关的最小闭环整理出来。

第 36 篇4 分钟

基于 Fastify + Prisma 的 Blog API:前置知识储备

前面我们已经把 Node.js 的运行时、工程化和服务开发主线分别拆开理解过了。接下来,是时候把它们放进一个完整项目里了。这一篇先不直接写代码,而是先把 Blog API 的目标、边界、技术选型、环境准备和核心模型对齐清楚。

第 37 篇4 分钟

基于 Fastify + Prisma 的 Blog API:项目开发与接口设计

有了前置认知以后,接下来就轮到真正的接口设计与项目开发。Blog API 不是为了做一个“接口很多的 demo”,而是为了把 Node.js 服务端开发中最关键的几条主线串起来,比如路由组织、服务拆分、数据访问、错误处理和接口契约一致性。

STAGE

工具化与延展