【问题标题】:Nest can't resolve dependencies of the Service while compiling nest projectNest 在编译嵌套项目时无法解析服务的依赖项
【发布时间】:2021-01-26 02:02:33
【问题描述】:

编译以下代码时出现以下错误: 我是 nestjs 新手,这是附加的示例应用程序代码。 我也尝试用 UsersModule 替换 module.ts 中的 UsersService,但它没有用。我做错了什么?

 [Nest] 19960 - 10/19/2020, 11:42:09 PM [NestFactory] Starting Nest application...
[Nest] 19960 - 10/19/2020, 11:42:09 PM [InstanceLoader] MongooseModule dependencies initialized +25ms
[Nest] 19960 - 10/19/2020, 11:42:09 PM [InstanceLoader] PassportModule dependencies initialized +1ms
[Nest] 19960 - 10/19/2020, 11:42:09 PM [ExceptionHandler] Nest can't resolve dependencies of the AuthService (?, JwtService). Please make sure that the argument UsersService at index [0] is available in the AuthService context.

Potential solutions:

If UsersService is a provider, is it part of the current AuthService?
If UsersService is exported from a separate @module, is that module imported within AuthService?
@module({
imports: [ /* the Module containing UsersService */ ]
})

存储库:https://github.com/richakhetan/task-manager-nest

【问题讨论】:

    标签: node.js typescript nestjs


    【解决方案1】:

    您在AuthModule 和UserModule 之间存在循环依赖关系和 在UserService 和AuthService 之间。要解决此问题,您需要在模块和服务上使用forwardRef。通常,这看起来像

    @Module({
      imports: [forwardRef(() => UserModule)],
      providers: [AuthService],
      exports: [AuthService],
    })
    export class AuthModule {}
    
    @Module({
      imports: [forwardRef(() => AuthModule)],
      providers: [UserService],
      exports: [UserService],
    })
    export class UserModule {}
    
    @Injectable()
    export class AuthService {
      constructor(@Inject(forwardRef(() => UserService)) private readonly userService: UserService) {}
    }
    
    @Injectable()
    export class UserService {
      cosntructor(@Inject(forwardRef(() => AuthService) private readonly authService: AuthService) {}
    }
    

    编辑

    忘记添加exports 属性

    【讨论】:

    • 错误:Nest 无法解析 UsersService(UserModel,?)的依赖关系。请确保索引 [1] 处的参数 AuthService 在 UsersModule 上下文中可用。潜在的解决方案: - 如果 AuthService 是提供者,它是当前用户模块的一部分吗? - 如果 AuthService 是从单独的 @Module 导出的,那么该模块是否会导入到 UsersModule 中? @Module({ imports: [ /* 包含 AuthService 的模块 */ ] })
    • 抱歉,忘记exports
    • 我也更新了存储库。如果这可以提供更多上下文
    • 在您的存储库中,forwardRef(() => AuthService 位于 imports 数组中。服务从不进入imports 数组。
    【解决方案2】:

    模块结构不正确。我从模块中删除了导致循环依赖的代码,并创建了一个新模块,创建了一个清晰的结构。

    详细代码可以在存储库中找到。 存储库:https://github.com/richakhetan/task-manager-nest

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2023-04-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 2021-01-28
      • 2021-11-24
      相关资源
      最近更新 更多