Nest.js

Nest.js

September 20, 2022
node

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) 启发,有以下作用

  1. 在方法处理前后执行额外的处理逻辑
  2. 处理函数返回的结果
  3. 处理函数抛出来的异常
  4. 拓展函数基础功能
  5. 覆盖函数的结果,如缓存

Guards #

单一职责:控制请求是否会被对应的 route handle 处理,基于权限,角色等判断

Middleware #

在路由处理器调用前被调的函数,能访问 request, response 对象,和下一个中间件函数 next

缺点: 不知道执行 next() 后调用哪个 handler

Pipes #

两个使用场景

  1. 转换:对输入数据的转换,变成应用需要的格式

  2. 校验:对输入数据的合法性校验,不符合规则抛异常

Exception filters #

未被应用层处理的异常,会被这一层捕获,并给出对应的响应