首页 / Node.js 教程 / 框架选型:Fastify/NestJS/Hono

Node.js 教程

框架选型:Fastify/NestJS/Hono

本教程共 76 篇 · 第 43 篇 · 更新于 2026-07-25 · 约 5 分钟阅读

Node.jsFastifyNestJSHono框架选型

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/边缘计算部署、追求极简启动速度、需要跨运行时兼容的项目。

三款框架横向对比

维度ExpressFastifyNestJSHono
性能中等中等(可切 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 模块舒服点