一篇能带你搞懂前端Nest.js核心原理的文章
1. Nest.js是搞懂前端什么?
Nest.js 是一个 Node.js 的后端框架,它是心原对Express上做了一层封装,解决了架构问题。文章
它提供了 Express 没有的搞懂前端 MVC、IOC、心原AOP 等架构特性,文章使得代码更容易维护、搞懂前端扩展。心原
2. Nest.js的文章核心技术: MVC、IOC、搞懂前端AOP
MVC,心原IOC,AOP是Nest.js编程上最常用的核心技术,而这些技术类似于Java的文章Spring,
在社区上,搞懂前端有一句对它的心原描述: "JS版的Spring"。
(1)MVCMVC是文章Model View Controller的简写。也就是模型层,视图层,控制层。
它跟MVVM架构不一样,MVC架构下,网站模板请求会先发送到控制层(C) ,再由它调度模型层(M)的Service来完成业务逻辑,
最后返回对应的视图层(V)。 下面是它的逻辑图。

(1)IOC是Inverse Of Control的简写。通过@Controller、@Injectable装饰器声明类(class) 就会被Nest.js扫描,创建对应的对象并添加到一个容器里,这些对象会根据构造器里声明的依赖 “自动注入”,也就是DI(dependency inject),这就是IOC的思想。
(2)IOC架构的好处就是不需要手动创建对象和根据依赖关系传入不同对象的构造器中,一切都是自动扫描并创建、注入的。


(3)AOP
AOP架构又是什么呢?AOP是Aspect Oriented Program的站群服务器简写。也就是面向切面编程。
在Nest中,一个请求过来,会经过 Controller 到 Service 再到 Repository 。也就是MVC的一个流程。 在进入这个 Controller 之前呢,我们会进行一个 JWT 或者异常处理,日志处理等等。
如果直接在改造 Controller 控制层的代码,这显然很不优雅,可能还会使控制器变得无法控制。
所以在进入控制层(C)之前,就进行了一个切面,在进入 Controller 之前做一些处理。 如下图:

在Nest.js实现AOP的方式有5种: Gurad (守卫)、 Pipe (管道)、 Interceptor (拦截器)、 ExceptionFilter (异常过滤器)、还有 Middleware (中间件)。
而中间件来实现 AOP 比较特别,因为 Express 的中间件洋葱模型,它可以透明的在外面包一层,加入一些逻辑,内层感知不到。Nest.js的IT技术网 Middleware 中间件是直接继承于Express框架的。
下面是AOP的一个例子代码:

上面的代码对单独的路由进行了 Gurad 和 Interceptor 加上了两层透明的逻辑(权限控制以及拦截器),这就是 AOP 的好处。
思考:当AOP的五种创建方式同时存在的时候,是先执行哪种方式呢?
3. 源码阅读
在我们学习任何语言,都少不了看源码,特别在这种执行顺序方面上,我们常常都可以在源码找到我们的答案。针对这个问题,于是我就从github上clone下源码进行针对性的研究:
主要文件:`router-execution-context.ts`
(1) 首先我们看一下 create 函数返回的函数,由执行顺序看出,先判断 fnCanActivate 函数,这个函数是 Guard 的,也就是先用 Guard 判断是否有权限。
(2) fnCanActivate 是通过调用 createGuardsFn 函数,进入函数判断是否有权限,如果没有权限就抛出异常,而异常是由 ExceptionFilter 处理的。
(3)接下来进行调用了 Interceptor 拦截器处理,和 Guard 一样,进行链式调用处理。所有处理完后,最后调用 Controller 的方法。也就是进入路由。
(4) 进入路由前,也就是调用 Controller 方法之前,使用了 Pipe 去对这些参数进行处理。
4. 总结
MVC是Model View Controller的简写。请求先经过Controller,然后再调用Model进行Service、Repository完成业务逻辑,
最后返回对应的View。
IOC是Inverse Of Control的简写。IOC是指Nest.js会自动扫描带有@Controller、@Injectable装饰器的类,
创建他们的对象,并根据依赖关系自动注入它依赖的对象,免去了手动创建和组装对象的麻烦。
AOP是Aspect Oriented Program的简写。AOP是把通用的逻辑抽离出,通过切面编程的方式添加到某个方法,类上去,
可以复用其通用逻辑。Gurad(守卫)、Pipe(管道)、Interceptor(拦截器)、ExceptionFilter(异常过滤器)、
还有Middleware(中间件)。这些都是AOP思想的实现。其AOP在Nest.js的调用顺序可以由下面流程图表示:

相关文章
电脑链接错误代码651的解决办法(遇到错误代码651时,你需要知道的关键信息)
摘要:在使用电脑过程中,我们可能会遇到各种各样的错误代码。其中,错误代码651是一个常见的链接错误代码,它通常出现在使用宽带或者拨号上网时。这个错误代码意味着你的电脑无法正确连接到互联网...2025-11-05戴尔Vostro1440(一款适合商务使用的高性价比笔记本电脑)
摘要:戴尔Vostro1440是一款专为商务用户设计的笔记本电脑,它具备出色的性能和稳定可靠的品质,适合日常办公工作、商务会议、数据处理以及轻度娱乐等需求。本文将从多个方面详细介绍这款笔...2025-11-05以ezbook系统重装教程为主题的完全指南(轻松掌握ezbook系统重装,快速解决问题)
摘要:随着电脑使用时间的增长,系统出现各种问题几乎不可避免。本文将为大家提供一份详细的ezbook系统重装教程,帮助您快速而安全地解决各种系统问题,让您的电脑焕发新生。一:备份重...2025-11-05Z370电脑装机教程(轻松组建高性能电脑,Z370主板全面解析)
摘要:电脑组装对于很多人来说可能是一个陌生的领域,但事实上,只要有一定的指导和了解,每个人都可以轻松完成一台高性能的电脑的组装。本文将以Z370主板为主题,为大家详细介绍如何进行电脑装机...2025-11-05雷神新电脑开不开机教程(解决雷神新电脑无法启动的问题,让您顺利开机)
摘要:雷神新电脑作为一款高性能的游戏本,备受玩家追捧。但是,有时候我们可能会遇到雷神新电脑无法开机的问题,影响我们的使用体验。本文将为大家介绍解决雷神新电脑开不开机问题的方法,帮助大家顺...2025-11-05U盘安装台式电脑教程(详细步骤让您快速上手,成为电脑DIY高手)
摘要:现在,随着电脑硬件技术的不断发展和成熟,越来越多的人开始尝试自己动手搭建台式电脑。而使用U盘安装操作系统是一种常见且便捷的方法。本文将详细介绍如何使用U盘安装台式电脑的操作系统,并...2025-11-05

最新评论