NestJS 概述
NestJS 是构建在 Express/Fastify 之上的渐进式 Node.js 服务端框架,借鉴 Angular 的模块化与依赖注入(DI)思想,将「企业级结构约束」带入 Node 生态。它本身不重新实现 HTTP 层,而是以平台适配器(默认 Express,可切换 Fastify)承载请求。
设计哲学:约束优于配置
图表渲染中…
核心三元组
| 概念 | 职责 | 装饰器 |
|---|---|---|
| Module | 组织相关 Provider/Controller 的边界 | @Module({}) |
| Controller | 接收请求、调用 Service、返回响应 | @Controller() |
| Provider | 封装业务逻辑与数据访问,可注入 | @Injectable() |
最小示例(ESM,v22)
ts
import { Module } from '@nestjs/common';
import { Controller, Get } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
findAll() { return [{ id: 1, name: 'alice' }]; }
}
@Controller('users')
export class UserController {
constructor(private readonly svc: UserService) {}
@Get()
findAll() { return this.svc.findAll(); }
}
@Module({ controllers: [UserController], providers: [UserService] })
export class UserModule {}与 Express/Koa/Fastify 的关系
- NestJS 不是另一个 HTTP 运行时,而是架构层;底层仍由 Express 或 Fastify 驱动。
- 在
NestFactory.create(AppModule, new FastifyAdapter())下可复用 Fastify 的高性能。 - 适合中大型团队需要统一分层、AOP(拦截器/守卫/管道)与可测试性的项目。
何时选择 NestJS
- ✅ 业务复杂、团队规模大、需要明确分层与 DI
- ✅ 需要 GraphQL、Microservices、WebSocket 等开箱集成
- ⚠️ 学习曲线陡峭,轻量 API 场景下引入成本高