【问题标题】:Nest js - circular reference at the moment to inject a repositoryNest js - 目前循环引用以注入存储库
【发布时间】:2020-08-05 20:59:10
【问题描述】:

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

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
],

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

【问题讨论】:

    标签: nestjs


    【解决方案1】:

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

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

    [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-562468943Kamil Mysliwiec 编写

    此错误表示您已将未定义的值传递给 @InjectRepository() 装饰器。我们真的不能再生产任何东西了 描述性 :( 确保您之间没有任何循环依赖关系 您的实体服务。

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

    【讨论】:

    • 太棒了,谢谢。我在构建测试时遇到了麻烦,并且遇到了同样的错误。原来我的导入类型错误(import User 而不是import { User }),并且由于引用提到传递undefined 值,我可以识别它
    • 对于任何可能遇到这种情况的人来说,我的问题是这里多余的逗号:imports: [TypeOrmModule.forFeature([Auth, User, ,Location])]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多