Nest全局模块与生命周期

前言


👹我们再进行Nest开发的时候往往需要进行模块间的导入和使用,但是如果有些模块我们需要全局进行使用,并且不希望每次使用的时候都进行繁琐的导入,我们能不能直接设置为全局的模块来使用?答案是可以,我们今天就来学习下Nest的全局模块,如果我们想在Module service controller生成或者销毁时做一些自己需要进行的操作,答案也是可以的,因为Nest中提供了一些创建销毁时的生命周期函数,今天我们就对这些东西进行系统学习一网打尽~

一.全局模块


🐻在我们学习使用全局模块之前我们先使用一下普通模块之间的导入,来感受一下为什么有时候需要进行全局模块的导入。

🤡首先我们先创建两个模块分别为aaabbb两个模块,通过如下命令进行创建.

js 复制代码
nest g resource aaa --no-spec
nest g resource bbb --no-spec

🫥我们进行模块之间的引用的步骤如下

  1. 在A模块中的Module中到出自己的service供其他模块使用。
  1. 在B模块中引入A模块,进而可以使用A模块中导出的内容。
  1. 在B模块的service中引入A模块的内容。
  1. 进而在B模块的service中使用对应的内容。

我们使用postman来进行请求一下看下返回的结果

我们会发现,模块之间的引用操作步骤是比较繁琐的,如果我们在某些模块中需要频繁使用这个模块中的数据,我们代码中的引用操作会非常的复杂,所以为了解决这个问题,就有了全局模块,我们可以将一个使用比较频繁的模块作为一个全局模块,这样就不需要引入而直接使用,但是需要注意的是我们要注意,使用过多的全局模块会导致代码难以维护,接下来我们来使用一下全局模块,非常简单,我们只需要在某个想要成为全局模块的module使用@global装饰器就可以了。

然后我们直接在B模块中去除对A模块的引入。

发现依然能够请求成功,说明全局模块生效了。

二.Nest启动时生命周期


😈我们知道Nest 在启动的时候,会递归解析 Module 依赖,扫描其中的 provider、controller,注入它的依赖,全部解析完后,会监听网络端口,开始处理请求

  1. 首先调用controllerservice中的onModuleInit方法然后再调用对应Module的此方法。
  2. 再依次调用对应的 onApplicationBootstrap 方法。
  3. 对网络端口进行监听。
  4. 正常启动。

三.Nest销毁时候的生命周期


🐻不仅仅在启动的时候有生命周期,其实在销毁的时候依然有对应的生命周期的内容。

四.总结


本小结学习了Nest全局模块和生命周期,全局模块需要谨慎使用,滥用会导致代码难以维护,同时Nest中也有相应的生命周期的概念,包括启动时刻的生命周期和销毁时候的生命周期的概念。

相关推荐
野犬寒鸦22 分钟前
从零起步学习并发编程 || 第四章:synchronized底层源码级讲解及项目实战应用案例
java·服务器·开发语言·jvm·后端·学习·面试
计算机毕设VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
没差c9 小时前
springboot集成flyway
java·spring boot·后端
三水不滴9 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
笨蛋不要掉眼泪10 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
sheji341613 小时前
【开题答辩全过程】以 基于SpringBoot的疗养院管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
短剑重铸之日13 小时前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
码界奇点14 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
代码匠心16 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛16 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask