NestJS无法解析UsersModule的依赖关系

问题描述 投票:0回答:1

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 {}

users.module.ts:

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

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

typescript nestjs
1个回答
3
投票

ErrorService未正确注入UsersModule

它应该是:

  • providersUsersModule
  • exports的一个模块imported的UsersModule

否则,Nest将无法解决它。将它添加到exportsAppModule并不能使它在全球范围内可用。

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

  • 1 - 将ErrorService添加到providersUsersModule。但它看起来并不合适,因为我认为/猜测你会在代码的许多其他部分重用这个服务(对吧?)。因此,更好:
  • 2 - 创建一个ErrorsModule exports ErrorService,然后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) {}
}
  • 3 - 我的最爱,如果你的服务应该被重用(LoggerService会更好吗?如果我的猜测是正确的话),使用@Global模块,你只需要在主模块中使用importAppModule

例:

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

然后你必须将LoggerModule添加到importsAppModule,而LoggerService将可以在任何地方注射而无需重新声明它。

© www.soinside.com 2019 - 2024. All rights reserved.