NestJS 基础概念

  • NestJS 基础概念已关闭评论
  • 83 次浏览
  • A+
所属分类:Web前端
摘要

 1. ModuleModule是NestJS 的基本组织单位。模块系统基于 Node.js 的 CommonJS 模块系统,但提供了更高级别的抽象和组织方式。通过使用模块,你可以将应用程序拆分成多个独立且可复用的部分,每个模块都负责实现特定的功能或业务逻辑。

 1. Module

Module是NestJS 的基本组织单位。

模块系统基于 Node.js 的 CommonJS 模块系统,但提供了更高级别的抽象和组织方式。通过使用模块,你可以将应用程序拆分成多个独立且可复用的部分,每个模块都负责实现特定的功能或业务逻辑。

模块可以封装相关的代码、配置和依赖关系,使得模块内部的实现细节对外不可见,只暴露必要的接口和功能。

模块之间可以定义明确的依赖关系,通过导入(imports)其他模块来获取所需的功能和服务。这有助于管理复杂应用程序中的依赖关系,确保组件之间的正确交互。

可以使用 @Module() 装饰器来定义一个模块,并在装饰器的元数据中指定模块的提供者、控制器、导入的模块等。这样,NestJS 就可以根据这些信息来构建和管理应用程序的模块结构。

 

2. Provider 

Provider是基于依赖注入的概念(Dependency Injection,简称DI)

是一种实现控制反转(Inversion of Control,简称IoC)的设计模式。

基本思想是解耦,通过外部框架,将类所依赖的对象(Provider)注入到类中,使得类在运行时动态地获取其所依赖的对象实例,从而实现松耦合。而不是硬编码方式直接关联在一起。

在 NestJS 中,你通常在模块的 @Module 装饰器的 providers 数组中注册提供者。这告诉 NestJS 该模块提供了哪些服务或值,并且这些提供者可以在该模块的作用域内被注入到其他类中。同时,如果你需要将提供者导出到其他模块使用,你可以在 exports 数组中指定它们。

可以通过装饰器(如 @Injectable())和构造函数参数来声明和注入依赖关系,NestJS 会在运行时自动解析这些依赖关系,并将相应的实例注入到类中。

 

3.Middleware

Middleware实际上是一个函数,它可以在请求或响应对象上执行某些操作,或者在传递给下一个处理程序之前进行预处理。这些Middleware函数在请求的处理过程中,按照定义的顺序依次执行,形成了一个类似洋葱模型的层层包裹和处理的结构。

4. Guards(守卫):

通常用于身份验证、角色检查或权限验证。
是最先执行的中间件,用于确定是否允许请求继续处理。(在请求还没到控制器之前执行)

 

5. Interceptors (拦截器):

如果 Guards 允许请求继续,那么 Interceptors 会在 Pipes 和Controller方法之前执行。

主要功能为:

    1. 在方法执行前/后绑定额外的逻辑:
      拦截器可以在Controller方法被调用之前或之后执行自定义代码。这允许你执行如日志记录等每个请求都需要执行的任务。

    2. 转换函数返回的结果:
      你可以使用拦截器来修改从控制器方法返回的数据。例如,你可能希望转换数据的格式,或添加额外的元数据到响应中。

    3. 转换函数抛出的异常:
      如果控制器方法抛出了异常,拦截器可以捕获这个异常,并根据需要转换它。这可以用于统一异常处理,例如将内部错误转换为更友好的用户错误信息。

    4. 扩展基本函数行为:
      拦截器允许你在不修改原始控制器方法的情况下添加新的功能。这意味着你可以在不破坏现有代码的基础上,增强应用程序的功能。

    5. 根据特定条件完全覆盖一个函数:
      有时,你可能想要根据某些条件(如缓存)完全替换控制器方法的默认行为。拦截器可以做到这一点,通过检查特定条件,并在满足这些条件时返回预定义的结果或执行不同的逻辑。

 

6. Pipes(管道):

主要用于对请求接口的入参进行验证和转换的前置操作。(每当一个请求被路由到具体的Controller方法后,会先通过管道对传入的请求参数进行转换和验证 )

 

7. Exception filters (异常过滤器):

用来处理应用程序中抛出的异常和错误的。

 可以实现:

  1. 统一错误响应格式
  2. 自定义HTTP状态码
  3. 添加额外的响应信息
  4. 记录错误日志