Nest.js
September 20, 2022
Providers #
提供者,生产者,由 @Injectable() 装饰的类即为 provider
注册 #
在 @Module 里注册,由 Nest IOC runtime 去解析并做依赖注入 (DI)
Services #
可做为 provider,实现并提供具体的功能
Controller #
消费者,使用 provider 提供的 service
处理 client 的请求,并返回响应
DTO #
Data transfer object
定义数据传输的结构,通过 class 去定义
Module #
由 @Module 装饰的类,nest 利用 @Module 提供的元数据组织应用结构
封装 providers,不属于当前 module 或 imports 里的 provider 无法被实例化
module 不可作为 provider,(避免循环依赖)
imports #
导出 provider 给当前 module 使用的 module
providers #
由 nest 注入器实例化,在当前 module 内共享
controllers #
当前 module 需实例化的 controllers
exports #
providers 的子集,由当前 module 提供,导出给其他 module 使用
dynamic module #
运行时创建的 module
Interceptor #
受 Aspect Oriented Programming (AOP) 启发,有以下作用
- 在方法处理前后执行额外的处理逻辑
- 处理函数返回的结果
- 处理函数抛出来的异常
- 拓展函数基础功能
- 覆盖函数的结果,如缓存
Guards #
单一职责:控制请求是否会被对应的 route handle 处理,基于权限,角色等判断
Middleware #
在路由处理器调用前被调的函数,能访问 request, response 对象,和下一个中间件函数 next
缺点: 不知道执行 next() 后调用哪个 handler
Pipes #
两个使用场景
-
转换:对输入数据的转换,变成应用需要的格式
-
校验:对输入数据的合法性校验,不符合规则抛异常
Exception filters #
未被应用层处理的异常,会被这一层捕获,并给出对应的响应