NestJS简介 #
什么是NestJS? #
NestJS是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它由Kamil Myśliwiec于2017年创建,使用TypeScript编写,完全支持TypeScript(同时也支持纯JavaScript)。
NestJS在设计上大量借鉴了Angular的架构理念,采用模块化、依赖注入等企业级开发模式,使得构建大型、复杂的应用变得更加容易。
NestJS的特点 #
1. 企业级架构 #
NestJS提供了完整的企业级应用架构:
text
┌─────────────────────────────────────────┐
│ NestJS 应用 │
├─────────────────────────────────────────┤
│ Modules (模块) - 组织代码结构 │
│ Controllers (控制器) - 处理HTTP请求 │
│ Providers (提供者) - 业务逻辑 │
│ Middleware (中间件) - 请求预处理 │
│ Guards (守卫) - 权限控制 │
│ Interceptors (拦截器) - 响应处理 │
│ Pipes (管道) - 数据验证转换 │
│ Filters (过滤器) - 异常处理 │
└─────────────────────────────────────────┘
2. TypeScript原生支持 #
typescript
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll(): string {
return 'This action returns all users';
}
}
3. 装饰器语法 #
NestJS广泛使用装饰器,使代码更加简洁优雅:
| 装饰器 | 用途 |
|---|---|
@Module() |
定义模块 |
@Controller() |
定义控制器 |
@Injectable() |
定义可注入的服务 |
@Get() @Post() |
定义路由方法 |
@Body() @Param() |
获取请求参数 |
4. 框架无关性 #
NestJS底层可以使用不同的HTTP平台:
- Express:默认选项,生态丰富
- Fastify:高性能选择
typescript
// 使用Express(默认)
const app = await NestFactory.create(AppModule);
// 使用Fastify
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter(),
);
NestJS vs Express #
| 特性 | NestJS | Express |
|---|---|---|
| 架构 | 内置模块化架构 | 无固定架构 |
| TypeScript | 原生支持 | 需额外配置 |
| 依赖注入 | 内置IoC容器 | 无 |
| 装饰器 | 广泛使用 | 不使用 |
| 学习曲线 | 较陡峭 | 平缓 |
| 适用场景 | 企业级应用 | 小型/中型应用 |
| 性能 | 略低(抽象层) | 更高 |
应用场景 #
NestJS适合以下场景:
1. 企业级后端服务 #
- 大型复杂业务系统
- 微服务架构
- RESTful API服务
2. 全栈应用 #
- 配合Angular/React/Vue前端
- 服务端渲染(SSR)
- BFF(Backend For Frontend)
3. 实时应用 #
- WebSocket服务
- 聊天应用
- 实时通知
4. 微服务 #
- 消息队列集成
- gRPC服务
- 事件驱动架构
技术栈概览 #
text
NestJS 技术栈
├── 核心框架
│ ├── @nestjs/core 核心模块
│ ├── @nestjs/common 公共工具
│ └── @nestjs/platform-* 平台适配器
├── 数据库
│ ├── @nestjs/typeorm TypeORM集成
│ ├── @nestjs/mongoose MongoDB集成
│ └── @nestjs/prisma Prisma集成
├── 安全
│ ├── @nestjs/passport 认证集成
│ └── @nestjs/jwt JWT支持
├── 微服务
│ ├── @nestjs/microservices 微服务支持
│ └── @nestjs/grpc gRPC支持
├── 工具
│ ├── @nestjs/cli 命令行工具
│ └── @nestjs/testing 测试工具
└── WebSockets
└── @nestjs/websockets WebSocket支持
核心概念预览 #
模块(Module) #
模块是组织应用结构的基本单元:
typescript
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
控制器(Controller) #
控制器处理传入的请求:
typescript
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
}
提供者(Provider) #
提供者包含业务逻辑:
typescript
@Injectable()
export class UsersService {
private users = [];
findAll() {
return this.users;
}
}
为什么选择NestJS? #
适合选择NestJS的情况 #
- 团队熟悉Angular或TypeScript
- 需要构建大型、可维护的应用
- 需要标准化的项目结构
- 需要完善的依赖注入系统
- 需要微服务架构支持
可能不适合的情况 #
- 小型、简单的项目
- 团队不熟悉TypeScript
- 追求极致性能
- 学习成本敏感
版本说明 #
本指南基于 NestJS 10+ 编写:
| 版本 | 状态 | 说明 |
|---|---|---|
| NestJS 10+ | 推荐 | 最新版本 |
| NestJS 9 | 维护 | 稳定版本 |
| NestJS 8及以下 | 旧版 | 建议升级 |
总结 #
NestJS是一个功能强大、架构完善的Node.js框架,特别适合构建企业级应用。它通过模块化、依赖注入等设计模式,帮助开发者编写可维护、可测试、可扩展的代码。
接下来,让我们开始 安装与环境搭建。
最后更新:2026-03-28