NestJS基础与核心概念

48 阅读2分钟

NestJS文件名

*.module.ts : 通常是模块文件,用于组织和管理控制器、服务、守卫等。它是Nest.js 应用程序的基础单元

*.service.ts : Service 层通常用于处理模块的业务逻辑。它们通常被注入到控制器(controller)中,并可以访 问数据库、执行计算等

*.controller.ts : 控制器文件用于处理HTTP请求和响应。它们通常依赖于 Service 来执行业务逻辑

*.guard.ts : 守卫文件用于实现路由保护,例如身份验证和授权

*.interface.ts : 接口文件用于定义局部用到的类型和数据结构,以确保代码的健壮性。(ts声明等)

*.dto.ts : 数据传输对象(DTO)用于验证客户端发送的数据

*.entity.ts : 实体文件用于定义数据库模型

Module:

根模块:每个Nest.js应用程序都有一个根模块,它是 Nest 用于构建应用程序图 (application graph)的起点。这个图用于解析模块与提供者(Providers)之间的关系和依赖。

组织组件:模块是组织和管理组件(如控制器、服务等)的有效方式。通过模块,你可以将密切相关的功能组合在一起。

多模块架构:对于大型应用程序,通常会采用多模块架构。每个模块都封装了一组特定的、密切相关的功能。

Controller:

Controller 层主要负责处理来自客户端的请求和发送响应。控制器会使用 Service 层提供的方法来执行业务逻辑,并将结果返回给客户端。

Service:

Service 层主要负责业务逻辑的实现。这一层通常会与数据库进行交互,执行 CRUD(创建、读取、更新、删除)操作,以及执行其他与业务逻辑相关的任务。

Provider:

Provider 是一切依赖注入的核心单位。它定义了可以被 Nest 管理、实例化并注入的资源 Provider = 可被 Nest 注入和复用的资源(类 / 值 / 工厂函数 / 别名等) 几乎所有业务逻辑相关的内容(如 Service、Repository、Helper、Factory)都是 Provider 当 NestJS 启动时:

  1. 它会扫描 providers
  2. 创建并缓存 Provider 实例
  3. 在需要的地方自动注入

依赖注入:

NestJS 的依赖注入基于一个 IoC(Inversion of Control)容器。容器负责创建和管理 Provider 实例,并在需要的地方自动注入 例如:

普通写法:

class UserService { getUser() { return 'Tom'; } }

class UserController { private userService = new UserService(); // 直接 new,强依赖 getUser() { return this.userService.getUser(); } } Controller 强依赖具体的 UserService 实现,无法替换、无法测试、无法复用:

依赖注入写法:

@Injectable() class UserService { getUser() { return 'Tom'; } }

@Controller('users') class UserController { constructor(private readonly userService: UserService) {}

@Get() getUser() { return this.userService.getUser(); } } UserController 不再自己创建 UserService,而是 由 Nest 的依赖注入容器自动提供。

CRUD接口

image.png

image.png

image.png