Skip to content

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 钩子,执行顺序如下:

  1. Middleware (中间件): 底层 Express/Fastify 中间件,最早执行。
  2. Guards (守卫): 权限验证 (Auth)。canActivate() 返回 true/false。
  3. Interceptors (拦截器): 在函数执行前后绑定额外逻辑(如响应转换、日志、缓存)。
  4. Pipes (管道): 参数验证与转换 (Validation / Transformation)。
  5. 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 社区长期存在的“架构自由”导致的大型项目难以维护的问题。

MIT Licensed | Keep Learning.