NestJS 核心指南
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它深受 Angular 的启发,强制使用 TypeScript 并采用模块化架构。
1. 核心设计理念
- TypeScript First: 原生支持 TypeScript,提供极佳的类型检查和开发体验。
- 依赖注入 (DI): 强大的 IOC (控制反转) 容器,解耦组件依赖,利于测试和维护。
- 模块化: 强制按照 Module 组织代码,适合大型企业级应用。
2. 核心构建块
2.1 Modules (模块)
应用的组织单元。@Module() 装饰器用于定义模块。
typescript
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService]
})
export class UsersModule {}2.2 Controllers (控制器)
负责处理传入的请求并将响应返回给客户端。
typescript
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get(':id')
findAll(@Param('id') id: string) {
return this.usersService.findOne(id);
}
}2.3 Providers (提供者) / Services
处理复杂的业务逻辑。通过构造函数注入到 Controller 或其他 Service 中。
typescript
@Injectable()
export class UsersService {
private readonly users = [];
create(user: User) {
this.users.push(user);
}
}3. AOP (面向切面编程) 体系
NestJS 提供了丰富的 AOP 钩子,执行顺序如下:
- Middleware (中间件): 底层 Express/Fastify 中间件,最早执行。
- Guards (守卫): 权限验证 (Auth)。
canActivate()返回 true/false。 - Interceptors (拦截器): 在函数执行前后绑定额外逻辑(如响应转换、日志、缓存)。
- Pipes (管道): 参数验证与转换 (Validation / Transformation)。
- Exception Filters (异常过滤器): 全局捕获异常并格式化响应。
4. 生态系统
- Microservices: 内置微服务支持 (TCP, Redis, RabbitMQ, gRPC)。
- GraphQL: 强大的 GraphQL 集成 (Code First / Schema First)。
- WebSockets: 通过 Gateway 轻松实现实时通信。
5. 与 Express/Koa 对比
NestJS 不是 Express 的替代品,而是上层架构。默认底层使用 Express,也可以切换到 Fastify 以获得更高性能。它解决了 Node.js 社区长期存在的“架构自由”导致的大型项目难以维护的问题。