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

时间:2020-08-05 02:08:23

标签: nestjs

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

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

我仅有的线索是我的模块之一:

如果我对此行发表评论:

constructor(
        @InjectRepository(Role) private roleRepo: Repository<Role>
    ){}

项目开始运行,但是我在启动项目时注意到日志,出现错误的模块先于所有内容开始

[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

但是我有app.module.ts文件,

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

有人对如何解决此问题有个想法?

1 个答案:

答案 0 :(得分:0)

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

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

[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

我注意到其中一个模块在所有操作之前都已注册, 原因是:我的一项服务中有一个未使用的import, 该进口商品包含另一项服务,并且正在产生 循环引用。

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

此错误表示您已将未定义的值传递到 @InjectRepository()装饰器。我们真的无法生产更多东西 描述性:(确保之间没有任何循环依赖 您的实体<->服务。

这是真的,在导入时,我试图注入尚未准备好的未注册模块/服务。 因此,针对此特定情况的解决方案,请清理代码,并删除未使用的导入。