NestJS
编程基础概念
AOP
AOP(Aspect-Oriented Programming)面向切面编程
业务和系统基础功能分离(日志、统计、鉴权等)
- 扩展功能方便,不影响业务之间的逻辑
- 逻辑集中管理
- 更有利于代码复用
IoC & DI
IoC(Inversion Of Control)控制反转
是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。
其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。
DI(Dependency Injection)依赖注入
是一种用于实现 IoC 的设计模式,它允许在类外创建依赖对象,并通过不同的方式将这些对象提供给类。
DTO & DAO
请求
-> DTO
<-> 逻辑
<-> DAO
-> 数据库
DTO(Data Transfer Object)数据传输对象
接受部分数据,对数据进行筛选,不对应实体,属性是小于等于实体。
查询一个表有 50 个字段,界面或服务只需要用到其中的某些字段,DTO 就包装出去的对象。
DAO(Data Access Object)数据访问对象
主要用来封装对数据库的访问(CURD - Create, Read, Update and Delete)
TypeORM 库就是 DAO 层
NestJS
文档
核心概念
- Controller:处理请求、返回响应
- Service:数据访问与核心逻辑
- Modules:组合所有的逻辑代码
- Respositories:处理在数据库中数据
- Guards:鉴权与认证相关
- Interceptors:给请求与响应加入额外的逻辑
- Pipes:校验请求的数据
INFO
Pipes have two typical use cases:
- transformation: transform input data to the desired form (e.g., from string to integer)
- validation: evaluate input data and if valid, simply pass it through unchanged; otherwise, throw an exception
- Filters:处理请求时的错误
生命周期

流程:
- Incoming request
- Middleware
- 2.1. Globally bound middleware
- 2.2. Module bound middleware
- Guards
- 3.1 Global guards
- 3.2 Controller guards
- 3.3 Route guards
- Interceptors (pre-controller)
- 4.1 Global interceptors
- 4.2 Controller interceptors
- 4.3 Route interceptors
- Pipes
- 5.1 Global pipes
- 5.2 Controller pipes
- 5.3 Route pipes
- 5.4 Route parameter pipes
- Controller (method handler)
- Service (if exists)
- Interceptors (post-request)
- 8.1 Route interceptor
- 8.2 Controller interceptor
- 8.3 Global interceptor
- Exception filters
- 9.1 Route filters
- 9.2 Controller filters
- 9.3 Global filters
- Server response