框架选型:Fastify/NestJS/Hono
本教程共 76 篇 · 第 43 篇 · 更新于 2026-07-25 · 约 5 分钟阅读
43. 框架选型:Fastify/NestJS/Hono
本节目标:Fastify、NestJS、Hono 的对比与场景化选型建议。
Express 不是唯一的选择,甚至不一定是最好的选择。不同项目对性能、类型安全、开发效率的权重不同,选型结果也会不同。这节我们对比三个主流替代方案:Fastify、NestJS 和 Hono,帮你判断什么时候该跳出 Express 的舒适区。
Fastify:性能优先
Fastify 的定位很清晰——在保持开发体验的前提下,榨干 Node.js 的性能。它的路由和 JSON 序列化都经过了深度优化,benchmark 里经常比 Express 快一倍。
npm install fastify
最小应用:
import Fastify from 'fastify'
const app = Fastify({ logger: true })
app.get('/', async () => {
return { hello: 'Fastify' }
})
app.listen({ port: 3000 }, (err) => {
if (err) throw err
})
Fastify 的路由处理器默认支持 async/await,返回的对象会自动 JSON 序列化。它还内置了 JSON Schema 校验:
const userSchema = {
schema: {
body: {
type: 'object',
required: ['name', 'email'],
properties: {
name: { type: 'string' },
email: { type: 'string', format: 'email' }
}
}
}
}
app.post('/users', userSchema, async (req, reply) => {
// req.body 已经通过校验
return { id: 1, name: req.body.name }
})
校验失败时 Fastify 自动返回 400,不需要你写 if (!req.body.name) 这种重复代码。
Fastify 的插件系统也很成熟,官方维护了数据库、缓存、认证等一堆插件,生态虽然没 Express 大,但质量普遍较高。
适合场景:高并发 API、对延迟敏感的服务、JSON 密集型的微服务。
NestJS:企业级工程化
NestJS 不像 Express 那样「轻量灵活」,它更像 Java 的 Spring 或前端界的 Angular——有一套完整的架构规范。如果你团队人多、项目复杂、需要长期维护,NestJS 的约束力反而是优势。
npm install @nestjs/core @nestjs/common @nestjs/platform-express
最小应用:
// app.controller.ts
import { Controller, Get } from '@nestjs/common'
@Controller()
export class AppController {
@Get()
getHello(): string {
return 'Hello NestJS'
}
}
// app.module.ts
import { Module } from '@nestjs/common'
import { AppController } from './app.controller'
@Module({
controllers: [AppController]
})
export class AppModule {}
// main.ts
import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
async function bootstrap() {
const app = await NestFactory.create(AppModule)
await app.listen(3000)
}
bootstrap()
NestJS 强制你按 Controller、Service、Module 组织代码,新人入职后看项目结构就知道代码在哪。它内置了依赖注入(DI),写单元测试时 mock 依赖非常方便:
@Injectable()
export class UserService {
findAll() {
return [{ id: 1, name: 'tom' }]
}
}
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findAll() {
return this.userService.findAll()
}
}
NestJS 底层默认跑在 Express 上,但可以一键切换到 Fastify,兼顾了生态和性能。
适合场景:大型企业应用、需要严格代码规范的项目、团队熟悉 TypeScript 和面向对象设计。
Hono:边缘时代的轻量选手
Hono 是这几年蹿升最快的新星,它的口号是「fast, lightweight, built on Web Standards」。它不只跑在 Node.js 上,还能直接部署到 Cloudflare Workers、Deno、Bun 等边缘运行时。
npm install hono
最小应用:
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => {
return c.json({ hello: 'Hono' })
})
export default app
Hono 的 API 设计非常简洁,c(Context)对象封装了请求和响应,方法名都很短:c.json()、c.text()、c.html()。中间件写法也直观:
app.use('*', async (c, next) => {
const start = Date.now()
await next()
const duration = Date.now() - start
console.log(`${c.req.method} ${c.req.url} - ${duration}ms`)
})
Hono 没有自己的「标准」,它完全基于 Web Standard(Request/Response),这意味着你学的知识可以在浏览器 Service Worker、Deno、Cloudflare Workers 之间迁移。
适合场景:Serverless/边缘计算部署、追求极简启动速度、需要跨运行时兼容的项目。
三款框架横向对比
| 维度 | Express | Fastify | NestJS | Hono |
|---|---|---|---|---|
| 性能 | 中等 | 高 | 中等(可切 Fastify) | 高 |
| 学习曲线 | 低 | 低 | 高 | 很低 |
| TypeScript 支持 | 需配置 | 良好 | 原生 | 原生 |
| 生态规模 | 最大 | 中等 | 围绕自身 | 快速增长 |
| 架构约束 | 无 | 轻 | 重 | 无 |
| 边缘/Serverless | 需适配 | 一般 | 重 | 原生支持 |
| 内置校验 | 无 | JSON Schema | 支持(class-validator) | 支持(Zod 等) |
选型建议
我按项目特征给几个直接的建议:
继续用 Express 如果:
- 团队刚接触 Node.js,需要最低的学习成本
- 项目依赖大量 Express 中间件,迁移成本高
- 需要最快的开发速度,不追求极致性能
切 Fastify 如果:
- API 接口量巨大,性能是瓶颈
- 想要内置的 Schema 校验和更好的日志
- 愿意接受稍微小一点的生态
上 NestJS 如果:
- 项目生命周期长,需要强规范约束代码质量
- 团队熟悉 Angular 或 Java Spring
- 需要微服务、GraphQL、WebSocket 等高级能力的一站式方案
试 Hono 如果:
- 要部署到 Cloudflare Workers、Vercel Edge 等平台
- 想要一个跨运行时的代码基座
- 项目小到不需要重型框架,但又想比裸
http模块舒服点