NestJS 无法解析 AuthServices 的依赖关系

Posted

技术标签:

【中文标题】NestJS 无法解析 AuthServices 的依赖关系【英文标题】:NestJS can't resolve dependencies of the AuthServices 【发布时间】:2019-12-19 18:33:30 【问题描述】:

first problem with JWT_MODULE_OPTION 之后,回到我认为已经解决的老问题。事实证明,当我“修复”旧问题时,会使用 JWT 创建新问题。

所以又无法编译:

Nest 无法解析 AuthService(?、RoleRepository、JwtService)的依赖关系。请确保索引 [0] 处的参数在 AppModule 上下文中可用。 +25 毫秒

这真的很奇怪,因为这种方式适用于我的另一个项目并且无法理解我错在哪里。这是auth.service.ts

@Injectable()
export class AuthService 
    constructor(
        @InjectRepository(User) private readonly userRepo: Repository<User>,
        @InjectRepository(Role) private readonly rolesRepo: Repository<Role>,
        private readonly jwtService: JwtService,
    )  

它得到了角色和jwtService,但问题出在User,路径是正确的。这是app.module.ts

@Module(
  imports: [
    TypeOrmModule.forRootAsync(
      imports: [ConfigModule, AuthModule],
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => (
        type: configService.dbType as any,
        host: configService.dbHost,
        port: configService.dbPort,
        username: configService.dbUsername,
        password: configService.dbPassword,
        database: configService.dbName,
        entities: ['./src/data/entities/*.ts'],
      ),
    ),
  ],
  controllers: [AppController, AuthController],
  providers: [AuthService],
)
export class AppModule  

对于控制器和提供者有相同的编译错误 & 无法理解出了什么问题...

【问题讨论】:

【参考方案1】:

您可能缺少 TypeOrmModule.forFeature([User]) 导入。通常,所有实体都导入到专用功能模块中。如果您只有一个模块(即AppModule),除了forRoot 导入之外,您还需要将forFeature 导入那里。

@Module(
  imports: [
    TypeOrmModule.forRootAsync(...),
    TypeOrmModule.forFeature([User, Role]),
  ],

【讨论】:

你是对的,谢谢。在我以前的项目中,我在 CoreModule 的 forFeature 中有所有实体。但是,当在 forFeature 中添加用户和角色时,AuthService 会收到另一个编译错误:Nest 无法解析 AuthService 的依赖项(UserRepository、RoleRepository、?)。请确保索引 [2] 处的参数在 AppModule 上下文中可用。 +21ms 我尝试在 forFeature 中添加 jwtService 但不起作用... 我添加了 - 注入:[ConfigService, JwtService],认为现在还可以,但是出现新错误... jwtServiceTypeormModule 无关。当您导入JwtModule 时,它会暴露JwtService;但仅在具有导入的模块中。查看此线程以了解如何导出服务以在其他模块中使用它:***.com/questions/51819504/… 是的,当注入 JwtService 时会收到此错误 --- Nest 无法解析 TypeOrmModuleOptions (ConfigService, ?) 的依赖关系。请确保索引 [1] 处的参数在 TypeOrmCoreModule 上下文中可用。 +25ms --- 如果我会解决这个问题,回到 AuthService 错误...【参考方案2】:

全局问题是我尝试添加 AuthService 和 AuthController 两次。所以我将它们从 app.module.ts 中删除,然后从 auth.module.ts 中导出 AuthService:

【讨论】:

以上是关于NestJS 无法解析 AuthServices 的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typeorm 连接到 Nestjs 中的 mssql,但 Nest 无法解析 EmployeeRepository 的依赖关系

NestJS 错误:错误:Nest 无法解析 AuthService (?, JwtService) 的依赖项

NestJS / TypeOrm / Neo4j :Nest 无法解析 NEO4J_DRIVER 的依赖关系

sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块

Nest 无法解析存储库的依赖关系

带有 ADFS 的 Kentor AuthServices