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

首先上代码

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

在某些文章是这样说的

"Circular dependency" error

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

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修饰你要使用的模块服务这样就可以不会出现循环引用的错误了。

posted @ 2024-02-02 19:37  术术子  阅读(139)  评论(0编辑  收藏  举报