翼度科技»论坛 编程开发 JavaScript 查看内容

NestJS 基础概念

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
 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方法之前执行。
主要功能为:

    • 在方法执行前/后绑定额外的逻辑:
      拦截器可以在Controller方法被调用之前或之后执行自定义代码。这允许你执行如日志记录等每个请求都需要执行的任务。
    • 转换函数返回的结果:
      你可以使用拦截器来修改从控制器方法返回的数据。例如,你可能希望转换数据的格式,或添加额外的元数据到响应中。
    • 转换函数抛出的异常:
      如果控制器方法抛出了异常,拦截器可以捕获这个异常,并根据需要转换它。这可以用于统一异常处理,例如将内部错误转换为更友好的用户错误信息。
    • 扩展基本函数行为:
      拦截器允许你在不修改原始控制器方法的情况下添加新的功能。这意味着你可以在不破坏现有代码的基础上,增强应用程序的功能。
    • 根据特定条件完全覆盖一个函数:
      有时,你可能想要根据某些条件(如缓存)完全替换控制器方法的默认行为。拦截器可以做到这一点,通过检查特定条件,并在满足这些条件时返回预定义的结果或执行不同的逻辑。

 
6. Pipes(管道):
主要用于对请求接口的入参进行验证和转换的前置操作。(每当一个请求被路由到具体的Controller方法后,会先通过管道对传入的请求参数进行转换和验证 )
 
7. Exception filters (异常过滤器):
用来处理应用程序中抛出的异常和错误的。
 可以实现:

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

来源:https://www.cnblogs.com/xinfangzhang/p/18121157
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
来自手机

举报 回复 使用道具