Задать вопрос

Почему контекст не видит зависимость?

Вот мой модуль БД с конфигом в useFactory:

/**
 * Токен сервиса БД
 */
export const DATABASE_TOKEN = 'PG_CONNECTION';

@Global()
@Module({
  imports: [ConfigModule],
  providers: [
    {
      provide: DATABASE_TOKEN,
      inject: [ConfigService],
      useFactory: (config: ConfigService) => {
        return new Pool({
          host: config.get<string>('DB_HOST'),
          port: config.get<number>('DB_PORT'),
          user: config.get<string>('DB_USER'),
          password: config.get<string>('DB_PASSWORD'),
          database: config.get<string>('DB_NAME'),
        });
      },
    },
    UsersRepository,
  ],
  exports: [UsersRepository, DATABASE_TOKEN],
})
export class DatabaseModule {}


App модуль куда импортирую БД модуль (так он он глобальный, то не важно куда его импортировать)
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    DatabaseModule,
    TelegramModule,
    WinstonModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


Здесь мой репозиторий.
@Injectable()
export class UsersRepository {
  constructor(@Inject(DATABASE_TOKEN) private readonly db: Pool) {}

  public async createUser(telegramId: number): Promise<void> {
    await this.db.query('INSERT INTO users (telegram_id) VALUES ($1)', [
      telegramId,
    ]);
  }
  public async getUserByTelegramId(telegramId: number) {}
  public async getUserById(id: number) {}
}


UndefinedDependencyException [Error]: Nest can't resolve dependencies of the UsersRepository (?). Please make sure that the argument dependency at index [0] is available in the DatabaseModule context.

Potential solutions:
- Is DatabaseModule a valid NestJS module?
- If dependency is a provider, is it part of the current DatabaseModule?
- If dependency is exported from a separate @Module, is that module imported within DatabaseModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

    at Injector.resolveSingleParam (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/injector.js:199:19)
    at resolveParam (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/injector.js:129:49)
    at Array.map (<anonymous>)
    at Injector.resolveConstructorParams (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/injector.js:144:58)
    at Injector.loadInstance (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/injector.js:70:24)
    at Injector.loadProvider (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/injector.js:98:20)
    at /Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/instance-loader.js:56:33
    at Array.map (<anonymous>)
    at InstanceLoader.createInstancesOfProviders (/Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/instance-loader.js:55:36)
    at /Users/homsi/Desktop/Projects/vpn_service/node_modules/@nestjs/core/injector/instance-loader.js:40:24
Waiting for the debugger to disconnect...


Ошибка возникает, когда я инжечку @Inject(DATABASE_TOKEN) private readonly db: Pool. Но я не понимаю почему. Помогите пожалуйста
  • Вопрос задан
  • 26 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы