Параметры из конфигурации в Nest
Пусть логин и адрес базы записаны прямо в модуле. На другой машине те же строки не подходят, а править исходник ради каждого окружения неудобно.
Ключи DB_HOST, DB_PORT,
DB_USER, DB_PASSWORD
и DB_NAME кладут в .env.
ConfigModule с методом forRoot
читает файл при старте. Модуль базы
подключают через forRootAsync:
фабрика получает ConfigService
и возвращает тот же объект postgres,
что и при синхронном подключении.
Покажем на примере постов:
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=site
В корневом модуле свяжем конфигурацию и асинхронное подключение TypeORM:
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('DB_HOST'),
port: Number(configService.get('DB_PORT')),
username: configService.get('DB_USER'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_NAME'),
autoLoadEntities: true,
synchronize: false,
}),
}),
],
})
export class AppModule {}
Возьмите параметры подключения к базе проекта работников из файла окружения и соберите из них объект соединения в модуле базы.