Nest中处理Module和Provider的循环依赖问题

1.处理Module和Module之间的循环依赖

首先新建一个nest项目,再建立两个module模块:

js 复制代码
nest new loop-dependency -p pnpm
nest g module aaa --no-spec
nest g module bbb --no-spec

然后让两个module相互依赖:

之后启动项目,执行npm run start:dev

项目启动后会发现程序报错了: 报错提示的是在解析BbbModule时,它的第一个importundefined

这有两种原因,一种是这个值本来就是undefined,另外一个就是形成了循环依赖。

因为nest在创建Module的时候会循环递归创建它的依赖,而它的依赖又依赖了这个module,所以没法创建成功,拿到的就是undefined

为了解决这种问题,我们可以先独立创建这两个module,然后让他们关联起来。

可以使用forwardref将其关联起来: 关联成功后,应用就重新运行成功了。

这里nest会单独创建各自的Module,然后再将Module的引用转发过去,也就是forwardref的作用。

2.处理Provider和Provider之间的循环依赖

service中可以注入其他的service,所以可能造成循环依赖。

我们先创建两个service文件:

js 复制代码
nest g service ccc --no-spec --flat
nest g service ddd --no-spec --flat

创建这两个service,并在app.module中引入:

之后让他们互相引入:

之后在App.service中调用:

这个时候就发现控制台报错: 原因同样是因为循环依赖。

这个也是通过forwardRef来解决,修改ccc.serviceddd.service:

然后在浏览器访问,可以看到打印出来的信息,正是所期待的,这也就说明service的循环依赖也解决了:

相关推荐
g***2679几秒前
Springboot中mybatis的使用
spring boot·后端·mybatis
程序员爱钓鱼15 分钟前
Node.js 编程实战:安装 Node.js 与 npm / yarn
后端·node.js·trae
CodeSheep19 分钟前
裁员为什么先裁技术人员?网友一针见血
前端·后端·程序员
程序员爱钓鱼19 分钟前
Node.js 编程实战:配置开发环境
后端·node.js·trae
WX-bisheyuange35 分钟前
基于Spring Boot的流浪动物管理系统
java·spring boot·后端
ArabySide41 分钟前
【Spring Boot】Interceptor的原理、配置、顺序控制及与Filter的关键区别
java·spring boot·后端
步步为营DotNet44 分钟前
深入理解ASP.NET Core Middleware:构建高效Web应用的管道基石
前端·后端·asp.net
爱笑的源码基地44 分钟前
智慧工地云平台源码,采用Java+SpringCloud+UniApp+MySql技术,支持多端展示,具备集团级多级权限管理。
人工智能·后端·spring·spring cloud·源码·智慧工地·工地智能管理
ALex_zry44 分钟前
系统编程的基石:补码循环溢出与Rust变量绑定的深度探索
开发语言·后端·rust
闲人编程1 小时前
Flask蓝图系统:模块化应用架构设计
后端·python·flask·api·蓝图·应用工厂·codecapsul