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