Гнездо. js не может разрешить зависимости - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь использовать ConfigService в моем users.module.ts, но получаю

Ошибка: Nest не может разрешить зависимости UsersService (UserRepository, HttpService,?). Убедитесь, что аргумент ConfigService по индексу [2] доступен в контексте UsersModule.

Потенциальные решения:

  • Если ConfigService является поставщиком, является ли он частью текущий UsersModule?
  • Если ConfigService экспортируется из отдельного @Module, импортируется ли этот модуль в UsersModule?

Я импортировал ConfigModule в мой UsersModule, но он все еще не работает: (*

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}

users.service. тс

export class UsersService {

 constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
    private readonly httpService: HttpService,
    private readonly configService: ConfigService,
  ) {}

}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Вам все равно придется объявить ConfigService в провайдерах users.module.ts. См. Пример ниже.

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService, ConfigService],
  exports: [UsersService],
})

export class UsersModule {}

Надеюсь это поможет.

Спасибо.

0 голосов
/ 12 февраля 2020

Вы кое-что пересекли (я тоже пережил ту же боль). Рекомендуется создать собственный репозиторий для обработки логов базы данных c.

Сначала объявите UserRepository:

@EntityRepository(User)
export class UserRepository extends Repository<User> {

    // add your custom db related method here later..

}

Затем в вашем AppModule необходимо объявить ваши сущности таковы:

@Module({

    imports: [

        TypeOrmModule.forRoot({

            type: 'mysql',
            host: process.env.DB_HOSTNAME || 'localhost',
            port: Number.parseInt(process.env.DB_PORT) || 3306,
            username: process.env.DB_USERNAME || 'root',
            password: process.env.DB_PASSWORD || 'mysql',
            database: process.env.DB_NAME || 'nestjs',
            synchronize: process.env.DB_SYNCHRONIZE === 'true' || true,
            keepConnectionAlive: true,
            entities: [

                User

            ]

        })

...

А потом в вашем UsersModule объявите свой репозиторий:

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}
...