Вот мой модуль БД с конфигом в 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. Но я не понимаю почему. Помогите пожалуйста