NestJS не может разрешить зависимости UsersModule - PullRequest
0 голосов
/ 12 июня 2018

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, но, например, в базе данныхМодуль используется аналогичным образом и работает без ошибок.Я немного растерялся) Может, кто-нибудь поможет.Спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

ErrorService неправильно введен в UsersModule.

Должно быть либо:

  • В providers из UsersModule
  • В exports одного модуля import, редактируемого UsersModule

В противном случае Nest не сможет его решить.И добавление его к exports из AppModule также не делает его глобально доступным.

Я вижу три решения:

  • 1 - Добавление ErrorService кproviders из UsersModule.Но это не выглядит правильным образом, так как я думаю / думаю, что вы будете использовать этот сервис во многих других частях кода (верно?).Таким образом, лучше:
  • 2 - создайте ErrorsModule, который exports на ErrorService, тогда UsersModule будет import 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 модуль, который вы будете import только один раз в своем основном модуле (AppModule)

Пример:

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

Тогда вы must добавьте LoggerModule к imports из AppModule, и LoggerService можно будет вводить в любом месте без необходимости повторного объявления.

...