Nest js - 目前循环引用以注入存储库

MrM*_*ins 12 nestjs

每次我尝试运行我的项目时,都会收到错误:

CircularDependencyException [错误]:在 @InjectRepository() 内部检测到循环依赖项。请确保双向关系的每一方都用“forwardRef()”修饰。另外,请尝试消除桶文件,因为它们也可能导致意外行为。

我唯一的线索是我的模块之一:

如果我评论这一行:

constructor(
        @InjectRepository(Role) private roleRepo: Repository<Role>
    ){}
Run Code Online (Sandbox Code Playgroud)

并且项目运行,但我在启动项目时注意到日志,出现错误的模块在所有内容之前启动

[Nest] 16872   - 08/04/2020, 7:56:24 PM   [NestFactory] Starting Nest application...
[Nest] 16872   - 08/04/2020, 7:56:24 PM   [InstanceLoader] TypeOrmModule dependencies initialized +91ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] MyErrorModule dependencies initialized +500ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmCoreModule dependencies initialized +630ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +2ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +1ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +1ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +1ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +4ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] AuthorizationModule dependencies initialized +3ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] AppModule dependencies initialized +3ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] FirstModule dependencies initialized +2ms
Run Code Online (Sandbox Code Playgroud)

但我有我的app.module.ts文件

@Module({
  imports: [TypeOrmModule.forRootAsync({
    useClass: DatabaseConnectionService
  }), 
  AuthorizationModule,
  TypeOrmModule.forFeature([User, Role]),
  FirstModule, 
  SecondModule,
  MyErrorModule, //This is the first to be executed
],
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?

MrM*_*ins 11

好吧,我决定不删除这个问题,因为它可能对其他人有帮助。

日志的这一部分对于调试我的问题很重要:

[Nest] 16872   - 08/04/2020, 7:56:24 PM   [NestFactory] Starting Nest application...
[Nest] 16872   - 08/04/2020, 7:56:24 PM   [InstanceLoader] TypeOrmModule dependencies initialized +91ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] MyErrorModule dependencies initialized +500ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmCoreModule dependencies initialized +630ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +2ms
Run Code Online (Sandbox Code Playgroud)

我注意到其中一个模块在所有内容之前都已注册,原因是:我import的一项服务中有一个未使用的模块,并且该导入包含另一项服务,并且正在生成循环引用。

这就是为什么在这个线程中:https://github.com/nestjs/nest/issues/3555#issuecomment-562468943由Kamil Mysliwiec编写

此错误意味着您已将未定义的值传递给 @InjectRepository() 装饰器。我们无法真正生成任何更具描述性的内容:(确保您的实体<->服务之间没有任何循环依赖关系。

确实如此,通过导入,我尝试注入尚未准备就绪的未注册模块/服务。因此,针对这种特定情况的解决方案是清理代码并删除未使用的导入。


Ole*_*rin 5

就我而言,这是因为错误的“路径”。我使用“@”作为路径的简写,IDE 告诉我路径没问题,但 Nest.js 说这是循环依赖。