NestJS无法解析UsersModule的依赖项

Vla*_*kov 0 typescript nestjs

NestJS无法解析UsersModule的依赖项。错误: Error: Nest can't resolve dependencies of the UsersModule (?). Please verify whether [0] argument is available in the current context.

app.module.ts:

@Module({
  imports: [
    ConfigModule,
    DatabaseModule,
    GraphQLModule,
    UsersModule,
  ],
  providers: [
    ErrorService,
  ],
  exports: [
    DatabaseModule,
    ErrorService,
  ],
})
export class AppModule implements NestModule {}
Run Code Online (Sandbox Code Playgroud)

users.module.ts:

@Module({
    imports: [
        DatabaseModule,
        ErrorService,
    ],
    providers: [
        UsersService,
        ...usersProviders,
        UserResolver,
    ],
})
export class UsersModule {
    constructor(private readonly errorService: ErrorService) {}
}
Run Code Online (Sandbox Code Playgroud)

问题是此ErrorService,但是例如数据库模块以类似的方式使用,并且可以正常工作而没有任何错误。我有点困惑)也许有人会帮忙。谢谢。

Vin*_*OPS 5

ErrorService未正确注入UsersModule

应该是:

  • providersUsersModule
  • exports一个模块import通过编UsersModule

否则,Nest无法解决它。并将其添加到exportsAppModule也不会使其全局可用。

我可以看到三种解决方案:

  • 1- ErrorService加到的providersUsersModule。但这似乎不是正确的方法,因为我认为/猜测您将在代码的许多其他部分中重复使用此服务(对吗?)。因此,更好:
  • 2 -创建ErrorsModule其中exportsErrorService,然后UsersModuleimport ErrorsModule,将能够注入的服务。

喜欢:

// errors.module.ts
@Module({
  providers: [ ErrorService ],
  exports: [ ErrorService ],
})
export class ErrorsModule {}

// users.module.ts
@Module({
  imports: [ErrorsModule],
})
export class UsersModule {
  constructor(private readonly errorService: ErrorService) {}
}
Run Code Online (Sandbox Code Playgroud)
  • 3-我的最爱,如果应该重用您的服务(会LoggerService更好吗?如果我的猜测是正确的话),@Globalimport在主模块(AppModule)中使用一次只能使用一次的模块

例:

@Global()
@Module({
  providers: [LoggerService],
  exports: [LoggerService],
})
export class LoggerModule {
  constructor(private readonly loggerService: LoggerService) { /* initialize logger, or whatever */ }
}
Run Code Online (Sandbox Code Playgroud)

然后,你必须添加LoggerModuleimportsAppModule,并且LoggerService将无需注射的任何地方重新申报。