首页 > 其他分享 >关于Nest.js循环引用问题的总结

关于Nest.js循环引用问题的总结

时间:2024-02-02 19:45:19浏览次数:22  
标签:依赖 Nest module js 循环 forwardRef 引用 模块

首先上代码

 这个东东中,AuthService就是触及了循环依赖的东西(纯自学搞了半天才找出毛病),首先什么是循环依赖,唉!问题来了

在某些文章是这样说的

"Circular dependency" error

偶尔你会发现在你的应用程序中很难避免circular dependencies。 您需要采取一些步骤来帮助 Nest 解决这些问题。 由循环依赖引起的错误如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Nest cannot create the <module> instance.
The module at index [<index>] of the <module> "imports" array is undefined.

Potential causes:
- A circular dependency between modules.
Use forwardRef() to avoid it.
Read more: https://docs.nestjs.com/fundamentals/circular-dependency
- The module at index [<index>] is of type "undefined".
Check your import statements and the type of the module.

Scope [<module_import_chain>]
# example chain AppModule -> FooModule

循环依赖可能产生于两个相互依赖的提供器,或者 typescript 文件彼此依赖于常量,比如从模块文件导出常量,然后导入到服务文件中。 在后一种情况下,建议为常量创建一个单独的文件。 在前一种情况下,请遵循循环依赖的指南,并确保模块  提供器都被标记为forwardRef

  在编程中,当两个或多个模块(或类)直接或间接地相互依赖时,就会出现循环依赖。假设A,B,CD 是四个模块,一个直接循环依赖的例子是ABA 。模块A 依赖于模块B ,而模块A 又依赖于 。

一个间接循环依赖的例子是:ABCA 。模块A 依赖于B ,而 并不直接依赖A ,但在其依赖链的后面引用了A

  在我学习nestjs中我的这个代码我的解决方法就是为UserService构造函数中AuthService的声明加上@Inject(forwardRef(() => AuthService)),细节方面是这样的

  

 这2个图片中的代码分别是user和auth的module出现循环引用的原因就是在之中二者都依赖于对方如果不加以处理就会报

 这种错误,tips(我初次学的时候老头大了)处理方法就是如上为这2个的应用模块加上forwardRef这样可以使二者模块相互引用的条件,然后再使用二者的service时可以这样

 

 利用@Inject修饰你要使用的模块服务这样就可以不会出现循环引用的错误了。

标签:依赖,Nest,module,js,循环,forwardRef,引用,模块
From: https://www.cnblogs.com/whpazz/p/18003738

相关文章

  • unity数据持久化-json
    JsonUtlityJsonUtlity是unity自带的序列化和反序列化工具类,主要提供了两个方法ToJson和FromJsonToJson序列化比如我们有一个类是这样的classPerson1{publicinttestI;publicfloattestF;publicdoubletestD;publicstringtestS;publicint[]......
  • Angular 17+ 高级教程 – Angular Configuration (angular.json)
    前言记入一些基本的配置。 SetupIPAddress、SSL、Self-signedCertificate如果你对IPAddress、SSL、Self-signedCertification不熟悉,请看这篇先 VsCode,VisualStudio2022,AngularandLiveServerRunningThroughHttpsandIPAddress在angular.json添加设......
  • ThreeJs实现简单的动画
    上一节实现可用鼠标控制相机的方式实现动态效果,但很多时候是需要场景自己产恒动态效果,而不是通过鼠标拖动,此时引入一个requestAnimationFrame方法,它实际上是通过定时任务的方式,每隔一点时间改变场景中内容后重新渲染一遍,间隔时间短的话视觉上就显示出连续的动画效果,Js本身也自带定......
  • PyCharm运行js代码
    1.安装Node.js1)官网:Node.js—Download(nodejs.org)2)将安装路径添加到系统环境变量path 3)在cmd中输入node-v,出现node版本,如下图,即安装成功  2PyCharm中安装NodeJS插件1)在Settings->Plugins里面,搜索NodeJS,然后点击安装 2)配置node解释器......
  • OpenHarmony—开发及引用动态共享包
    对于企业大型应用开发,有部分公共的资源和代码,只能在开发态静态共享,并且打包到每个依赖的HAP里,这样导致包体积较大,且有重复多份公共资源和代码重复打包到应用中。为了解决运行态状态无法共享,以及减少包体积,让多个HAP能够共享同一公共资源代码,DevEcoStudio支持动态共享包HSP(Harmon......
  • 在线JSON转CSV工具
    高效便捷,一键转换——在线JSON转CSV工具引领数据处理新潮流在大数据时代,数据处理与交换已经成为日常工作生活中的常态。而JSON和CSV作为两种广泛应用的数据格式,它们在不同场景下发挥着关键作用。然而,在实际操作中,我们时常需要在这两种格式之间进行转换。为此,一款强大且易用的在线JS......
  • JS直接下载PDF文件
    if(ext=="pdf"){varindex=_fileUri.lastIndexOf('/');varname=_fileUri.substr(index+1);varxhr=newXMLHttpRequest();xhr.open('get',_fileUri,true);xhr.responseType='b......
  • js+css 父div,里面有很多子div,当子div在父div中放不下时候,自动滚动子div,向左横向滚动,
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <style>    #parentDiv{  ......
  • 依赖注入之IConfiguration 访问appSetting.json
    (1)创建NET6Webapi(2)appsettings.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*&q......
  • js通过Image()获取图片尺寸
    注意需要在浏览器中使用,需要加载dom对象才能生效,如果直接使用jest将会报错超时exportconstgetImgSize=(url:string):Promise<object>=>{returnnewPromise((resolve)=>{letimgObj=newImage()imgObj.src=urlimgObj.onload=()......