#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
}
}
}
}