从 Express 到 Hono:Node.js 网络框架源码研究地图
- Node.js 服务端正从 Express/Koa 的中间件模型分化为三条路线:Fastify 的高性能插件模型、NestJS 的工程化模型、Hono 的 Web Standards 多运行时模型
- Fastify 用插件封装上下文和 Schema 驱动的校验序列化替代全局中间件栈,更适合大型系统;NestJS 是跑在 Express/Fastify 之上的应用框架,可替换平台适配层
- Hono 把框架建立在 Web 标准 Request/Response 上,经运行时适配层同时跑在 Node、Bun、Deno、Cloudflare Workers 等环境
- 研究 WebSocket 协议实现优先读 ws 而非 Socket.IO,前者完整覆盖 Upgrade、帧、掩码、分片与背压等协议细节
- 六个源码级研究对象:Express 读路由、Koa 读 compose、Fastify 读插件、Hono 读适配层、ws 读协议、Moleculer 读分布式
聊「Node.js 网络框架」,我习惯把范围放得宽一些:不只是 Express 这类 Web Framework,还包括 HTTP/API、WebSocket/Realtime、微服务、Proxy/Gateway 这些用来构建网络服务的开源项目。
截至 2026-09-29,这一领域有个很明显的趋势:Node.js 服务端正从早期的 Express/Koa 中间件模型,逐渐分化出三个方向——Fastify 的高性能插件模型、NestJS 的工程化模型,以及 Hono 的 Web Standards / 多运行时模型。
先看全景。Star 数为当日经 GitHub API 实查:
| 项目 | Star | 领域 | 定位 | 主要特点 | 研究价值 |
|---|---|---|---|---|---|
| NestJS | 76.7k | HTTP / 应用框架 | 企业级 Backend | DI、Module、Decorator、微服务 | ★★★★★ |
| Express | 69.5k | HTTP / 应用框架 | Web / HTTP | 极简、中间件生态巨大 | ★★★★★ |
| Socket.IO | 63.2k | Realtime | 双向低延迟通信 | Room、Namespace、重连、传输升级 | ★★★★ |
| Fastify | 37.2k | HTTP / 应用框架 | 高性能 HTTP | Plugin、Schema、低 overhead | ★★★★★ |
| Koa | 35.7k | HTTP / 应用框架 | Web / HTTP | 洋葱模型、中间件极简 | ★★★★ |
| Hono | 32.4k | HTTP / 应用框架 | Web Standards | Edge / Node / Bun / Deno | ★★★★★ |
| ws | 22.8k | Realtime | 轻量 WebSocket | RFC 6455 实现、Autobahn 全测 | ★★★★★ |
| AdonisJS | 19.1k | HTTP / 应用框架 | 全栈 Backend | TS-first、ORM、Auth、MVC | ★★★★ |
| Feathers | 15.3k | API / Realtime | Web API 框架 | Service 抽象、实时 API | ★★★★ |
| node-http-proxy | 14.1k | Proxy / Gateway | 可编程代理 | HTTP/HTTPS/WebSocket 代理 | ★★★ |
| Moleculer | 6.4k | 微服务 | 微服务运行时 | Service Discovery、RPC、MQ | ★★★★ |
Star 是量级参考而非严格排名。下面按一条演进路线展开:先讲 HTTP 框架五部曲,再看 Realtime、微服务、Service 抽象和网关,最后给出一份源码研究清单。
HTTP 框架五部曲:一条演进路线
Express:Node.js Web Framework 的「原点」
Express 到今天仍然值得读源码,因为后来大量 Node.js 框架的设计都拿它当坐标系。核心非常简单:
HTTP Server
↓
Application
↓
Router
↓
Middleware Stack
↓
Request → middleware → middleware → handler
核心思想就是 Middleware + Router + Request/Response 增强。Express 已进入 v5 时代,官方要求 Node.js 18 以上。
如果目标是「自己实现一个 Node.js 网络框架」,第一个读的应该是 Express,因为它能让你最快理解这套后来成为通用词汇的东西:
app.use()
router
Layer
next()
req / res
error middleware
Koa:研究 Middleware 模型必看
Koa 最大的贡献不是功能,而是经典的洋葱模型(Onion Middleware Model):
request
↓
middleware A
↓
middleware B
↓
middleware C
↓
handler
↑
middleware C
↑
middleware B
↑
middleware A
↓
response
典型代码:
app.use(async (ctx, next) => {
console.log('A start')
await next()
console.log('A end')
})
Koa 核心本身非常小,官方描述只有约 570 SLOC,也没有内置一堆 middleware。所以如果你的目标是写一个 mini Web Framework,Koa 源码可能比 NestJS 更值得先读。
Fastify:现代 HTTP Framework 的代表性设计
如果目的不是「学怎么用框架」,而是研究怎么设计一个现代 Node.js 网络框架,Fastify 是重点。它与 Express 最大的差异:
Express
↓
Middleware-oriented
Fastify
↓
Plugin-oriented
+
Schema-oriented
+
Encapsulation
Fastify 把核心能力组织成:
Fastify Instance
├── Router
├── Plugin System
│ └── Encapsulation Context
├── Hooks
├── Decorators
├── Schema
│ ├── Validation
│ └── Serialization
├── Logger
└── HTTP Server
官方目前把 Performance、低 overhead、Developer Experience 和 Plugin Architecture 作为核心方向,提供 HTTP/2、Serverless、TypeScript、Lifecycle、Hooks、Validation/Serialization 等完整机制。
最值得研究的是 Plugin Encapsulation:
root
├── plugin A
│ ├── decorator A
│ └── routes
│
└── plugin B
├── decorator B
└── routes
每个插件有自己的 context/scope。这套设计比 Express 的全局 middleware stack 更适合大型系统。
Hono:新一代多运行时框架
从近几年的 JS Server Framework 演进趋势看,Hono 特别值得关注。它有一个很重要的思想:
Framework 不应该绑定 Node.js。
Hono 建立在 Web Standards 之上,而不是 Node.js 的 IncomingMessage / ServerResponse 之上:
Hono App
│
Web Standards
│
┌──────────┼───────────┐
↓ ↓ ↓
Node.js Bun Deno
↓ ↓
AWS Lambda Cloudflare
↓
Fastly...
官方列出的运行环境包括 Node.js、Bun、Deno、Cloudflare Workers、Fastly、AWS Lambda、Lambda@Edge 等,Node.js 通过 honojs/node-server 这样的 adapter 接入。
这实际上是一个非常漂亮的架构:
Application
↓
Web Standard Request/Response
↓
Runtime Adapter
↓
Node / Bun / Deno / Worker
对现在的 AI Infra、Serverless、Edge 应用来说,这个方向非常值得研究。
NestJS:大型应用框架的首选研究对象
NestJS 和前面几个不太一样,它更接近 Spring Boot 和 Angular,而不是 Express。架构大致是:
Application
↓
Module
↓
Controller
↓
Service
↓
Provider
↓
Dependency Injection Container
同时提供 Middleware、Guard、Interceptor、Pipe、Filter、Decorator、Metadata、DI、Module、Microservices、WebSocket、GraphQL 一整套机制。Nest 默认跑在 Express 上,也可以切换到 Fastify:
NestJS
Application Framework
↓
Platform Adapter
↙ ↘
Express Fastify
↓ ↓
Node.js
这意味着 NestJS 更像一个 Application Framework / Architecture Framework,而 Fastify 和 Express 更接近 HTTP Framework。想研究 DI Container、Module Graph、Decorator + Metadata、Lifecycle、Framework Adapter,这个项目非常值得拆。
Realtime:Socket.IO 与 ws
Socket.IO:一套 Realtime 协议框架
socketio/socket.io · 63.2k Star
重点研究它的协议栈:
Client
↕
Engine.IO
↕
Socket.IO Protocol
↕
Server
以及 Room、Namespace、Broadcast、Reconnect、Heartbeat、Transport Upgrade、Adapter 这些机制。它不是简单的 WebSocket wrapper,而是一套更高层的 realtime protocol/framework。
ws:读协议实现的首选
websockets/ws · 22.8k Star
如果觉得 Socket.IO 太重,ws 更接近 RFC 6455 的直接实现。官方定位就是 Node.js 的轻量、高性能 WebSocket client/server implementation,并通过 Autobahn 测试套件。
要学习网络协议实现,ws 比 Socket.IO 更值得读源码,因为它能完整覆盖:
HTTP Upgrade
Handshake
Frame
Mask
Opcode
Ping/Pong
Fragmentation
Compression
Backpressure
微服务:Moleculer
一个相对没那么出圈、但技术上很有意思的项目,更接近 Node.js 世界里的 Service Mesh + RPC Framework + Microservice Runtime:
ServiceBroker
│
┌────┼────┐
↓ ↓ ↓
Svc A Svc B Svc C
│
Transporter
│
┌────┼───────────┐
TCP NATS Redis Kafka
MQTT AMQP ...
内置 Service Discovery、Load Balancing、Circuit Breaker、Bulkhead、Retry、Timeout、Caching、Metrics、Tracing。这个项目特别适合研究 Node.js 如何构建真正的分布式网络框架。
Service 抽象:Feathers
Feathers 的设计核心不是 Controller,而是 Service:
users.find()
users.get()
users.create()
users.update()
users.patch()
users.remove()
同一个 Service 可以暴露为 REST、WebSocket 或 Socket.IO:
Service
│
┌──────┼──────┐
↓ ↓ ↓
REST WS Socket.IO
这种 transport-independent 的 service abstraction 很有意思,官方目前将其定位为 TypeScript/JavaScript 的 Web API + realtime application framework。
Proxy / Gateway:node-http-proxy
http-party/node-http-proxy · 14.1k Star
如果把「网络框架」的边界扩到网络基础设施,还应该看这个可编程 HTTP 代理:
Client
↓
Node Proxy
↓
┌─┴─────────────┐
↓ ↓
Backend A Backend B
支持 HTTP / HTTPS / WebSocket,可以用来实现 reverse proxy、load balancer。不过这个项目架构偏传统——研究「现代 Node.js Gateway」时,我会把它当经典实现看,而不是新项目的架构模板。
研究路线:重点拆这六个
如果目的不是选型,而是研究「Node.js 网络框架到底应该怎么设计」,不建议平均用力看十几个项目,而是沿着这条演进路线:
Node.js Networking
│
┌───────────────┼────────────────┐
│ │ │
HTTP Realtime Distributed
│ │ │
Express ws Moleculer
│
Koa
│
Fastify
│
Hono
│
Web Standards
其中最值得源码级研究的六个:
| 项目 | 建议研究什么 |
|---|---|
| Express | Router / Middleware / Layer |
| Koa | compose / Onion Middleware |
| Fastify | Plugin / Encapsulation / Lifecycle / Schema |
| Hono | Router / Web Standards / Runtime Adapter |
| ws | WebSocket Protocol / Frame / Backpressure |
| Moleculer | RPC / Transport / Service Discovery / Load Balancing |
这六个项目覆盖了 Node.js 网络框架最核心的几个设计问题:
Framework
│
┌─────────────┬───────────┼───────────┬──────────────┐
│ │ │ │ │
Router Middleware Plugin Transport Runtime
│ │ │ │ │
Express Koa Fastify ws Hono
│
Moleculer
│
Distributed System
换个视角:Agent Runtime 的选型
最后补一个正在变得重要的视角。在 Agent Harness / AI Agent 基础设施的场景下,「哪个网络框架合适」的答案会和传统 CRUD Backend 明显不同:
| 框架 | 对应路线 |
|---|---|
| Hono | Edge Agent Runtime |
| Fastify | 高性能 Tool API |
| Moleculer | 分布式 Agent Runtime |
| NestJS | 企业级 Agent Platform |
同样的框架,放在 MCP Server 或 Agent Gateway 的语境里,取舍维度就从「中间件生态」变成了运行时覆盖、协议开销和分布式能力。这也是为什么上面那条从 Express 到 Web Standards 的演进线,值得在 AI 时代重新走一遍。

评论互动