typescript 使用forwardref的Nestjs循环依赖

jei2mxaa  于 2023-06-30  发布在  TypeScript
关注(0)|答案(3)|浏览(191)

嗨,伙计们,我在nestjs上得到了循环依赖错误,我尝试使用forwardref,但这对我没有帮助

// AuthModule 
@Module({
  imports: [
    forwardRef(() => UserModule),
    JwtModule.register({
      global: true,
      secret: process.env.TOKEN_SECRET,
      signOptions: { expiresIn: process.env.TOKEN_DURATION },
    }),
  ],
  providers: [AuthService, AuthGuard],
  controllers: [AuthController],
  exports: [AuthService],
})
export class AuthModule {}
// UserModule
@Module({
  imports: [forwardRef(() => AuthModule)],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService],
})
export class UserModule {}

在服务中,我正在访问其他服务,如下所示

private readonly authService: AuthService,

== CMD ERROR == [Nest] 2788 - 06/10/2023,12:56:50 PM LOG [InjectorLogger] Nest遇到未定义的依赖项。这可能是由于循环导入或缺少依赖项声明。[Nest] 2788 - 06/10/2023,12:56:50 PM ERROR [ExceptionHandler] Nest无法解析UserService(PrismaService,?,CONFIGURATION(app))。请确保索引[1]处的参数依赖关系在UserModule上下文中可用。
可能的解决方案:

  • UserModule是有效的NestJS模块吗?
  • 如果dependency是一个provider,它是当前UserModule的一部分吗?
  • 如果依赖项是从单独的@Module导出的,那么该模块是否在UserModule中导入?
@Module({
  imports: [ /* the Module containing dependency */ ]
})

为什么我有循环依赖!!

qojgxg4l

qojgxg4l1#

解决方案是在构造函数中使用@Inject()(我在哪里导入服务),您可以在文档中看到更多内容

eoxn13cs

eoxn13cs2#

这个答案不能帮助您解决问题,但可以让您更好地了解模块间的连接

您可以集成nestjs-spelunker

  • 有时候你想可视化模块的相互依赖关系,这样你就可以更好地推理它们。SpelunkerModule有一个图方法,它通过生成一个双向链接的图来构建explore方法的输出,其中每个节点表示一个模块,每个边表示到该模块的依赖项或从属项的链接。
bkhjykvo

bkhjykvo3#

尽量避免从其他服务调用服务。遵循减少模块间连接的路径

相关问题