当前位置: 首页 > 科技观察

干货!一篇可以帮助你理解前端Nest.js核心原理的文章

时间:2023-03-18 19:50:36 科技观察

1。什么是Nest.js?Nest.js是一个Node.js后端框架。它封装了Express来解决架构问题。它提供了Express所不具备的MVC、IOC、AOP等架构特性,使代码更易于维护和扩展。2、Nest.js的核心技术:MVC、IOC、AOPMVC、IOC、AOP是Nest.js编程中最常用的核心技术,这些技术类似于Java的Spring。在社区里,有这样一段描述:“SpringforJS”。(1)MVCMVC是ModelViewController的简称。即模型层、视图层和控制层。它不同于MVVM架构。MVC架构下,请求会先送到控制层(C),然后调度模型层(M)的服务,完成业务逻辑,最后返回对应的视图层(V).下面是它的逻辑图。(2)IOC(1)IOC是InverseOfControl的简称。通过@Controller和@Injectable装饰器声明的类(classes)会被Nest.js扫描,并创建相应的对象并添加到一个容器中。这些对象会根据构造函数中声明的依赖进行“自动注入”,即DI(dependencyinject),这就是IOC的思想。(2)IOC架构的优点是不需要手动创建对象,根据依赖关系传入不同对象的构造函数。一切都会自动扫描、创建和注入。(3)什么是AOPAOP架构?AOP是AspectOrientedProgram的缩写。那就是面向方面的编程。在Nest中,当一个请求到来时,它会通过Controller传递给Service,然后传递给Repository。那就是MVC的一个过程。在进入这个Controller之前,我们会进行一个JWT或者异常处理,日志处理等等。如果直接修改Controller控制层的代码,这样显然不优雅,还可能导致Controller无法控制。所以在进入控制层(C)之前,先做一个section,在进入Controller之前做一些处理。如下图所示:Nest.js中实现AOP的方式有5种:Gurad(守卫)、Pipe(管道)、Interceptor(拦截器)、ExceptionFilter(异常过滤器)、Middleware(中间件)。中间件实现AOP比较特殊,因为Express的中间件洋葱模型可以透明的在外面包裹一层,加上一些逻辑,内层是感知不到的。Nest.js的中间件直接继承自Express框架。下面是AOP的示例代码:上面的代码对各个路由进行了Gurad和Interceptor,并增加了两层透明逻辑(权限控制和拦截器),这就是AOP带来的好处。思考:当AOP的5个创建方法同时存在时,应该先执行哪个方法?3.源码阅读我们在学习任何一门语言的时候,都必须阅读源码,尤其是在这个执行序列中,往往可以在源码中找到我们的答案。针对这个问题,我从github上克隆了源码进行针对性的研究:mainfile:`router-execution-context.ts`(1)首先我们看一下create函数返回的函数,可以从执行顺序。先判断fnCanActivate函数,属于Guard,即先用Guard判断是否有权限。(2)fnCanActivate是调用createGuardsFn函数进入判断是否有权限的函数。如果没有权限,会抛出异常,异常由ExceptionFilter处理。(3)接下来调用Interceptor拦截器进行处理,与Guard一样进行链式调用处理。一切处理完毕,最后调用Controller的方法。也就是入门路线。(4)在进入路由之前,也就是在调用Controller方法之前,使用Pipe来处理这些参数。4.总结MVC是ModelViewController的简称。请求首先经过Controller,然后调用Model执行Service和Repository完成业务逻辑,最后返回对应的View。IOC是InverseOfControl的缩写。IOC是指Nest.js会自动扫描带有@Controller和@Injectable装饰器的类,创建它们的对象,并根据依赖关系自动注入它所依赖的对象,省去了手动创建和组装对象的麻烦。AOP是AspectOrientedProgram的缩写。AOP就是将通用逻辑抽取出来,通过切面编程的方式添加到某个方法或类中,使其通用逻辑可以被复用。Gurad(守卫)、Pipe(管道)、Interceptor(拦截器)、ExceptionFilter(异常过滤器)和Middleware(中间件)。这些都是AOP思想的实现。它的AOP在Nest.js中的调用顺序可以用下面的流程图来表示:最后祝大家在失败的这段时间有所收获