Как заставить файл NestJS читать значения .env

#javascript #nestjs #typeorm

#javascript #nestjs #typeorm

Вопрос:

У меня есть проект NestJS с файлом .env, который содержит некоторые значения. У меня возникли проблемы с чтением этих значений из моего конфигурационного файла TypeORM.

typeorm.config.ts

 import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import * as config from 'config';

const dbConfig = config.get('db') as any;

export const typeOrmConfig: TypeOrmModuleOptions = {
    type: dbConfig.type,
    host: process.env.HOST_NAME || dbConfig.host,
    port: process.env.DB_PORT || dbConfig.port,
    username: process.env.DB_USERNAME || dbConfig.username,
    password: process.env.DB_PASSWORD || dbConfig.password,
    database: process.env.DB_NAME || dbConfig.database,
    entities: [__dirname   '/../**/*.entity.{js,ts}'],
    synchronize: dbConfig.synchronize
};
 

В imports моем модуле у меня есть это:

 @Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true
    }),
    TypeOrmModule.forRoot(typeOrmConfig)
   ]
 

Чего мне не хватает?

Комментарии:

1. Что импортируется import * as config from 'config' ? Можете ли вы поделиться им?

2. Извините, это должен был быть import {config } из ‘dotenv’;

Ответ №1:

вы можете использовать useClass с TypeORM и внедрить службу конфигурации в классы параметров БД.

 TypeOrmModule.forRootAsync({ useClass: TypeOrmConfigService})
 

typeorm.config.ts

 @Injectable()
export class TypeOrmConfigService implements TypeOrmOptionsFactory {

  constructor(private configService: ConfigService) { }
  createTypeOrmOptions(): TypeOrmModuleOptions {
    return {
      host: this.configService.get<string>('DB_HOST', 'localhost'),
      type: 'mysql',
      port: this.configService.get<number>('DB_PORT', 3306),
      username: this.configService.get<string>('DB_USERNAME', 'local'),
      password: this.configService.get<string>('DB_PASSWORD', 'pwd'),
      database: this.configService.get<string>('DB_NAME', 'db'),
      entities: [__dirname   '/../*/.entity.{js,ts}'],
      retryAttempts: 3,
      extra: {
        connectionLimit: 5
      }
    }
  }
}