передать строковую переменную типу в TypeOrmModuleOptions - PullRequest
0 голосов
/ 01 октября 2019

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

import { DotenvConfigOutput, config } from 'dotenv';

const envFound: DotenvConfigOutput = config();

if (!envFound) {
  throw new Error('.env file was not found.');
}

process.env.NODE_ENV = process.env.NODE_ENV || 'development';

export const DATABASE_TYPE: string = process.env.DATABASE_TYPE || 'postgres';
export const DATABASE_USERNAME: string = process.env.DATABASE_USERNAME || 'admin';
export const DATABASE_PASSWORD: string = process.env.DATABASE_PASSWORD || 'myPW';
export const DATABASE_HOST: string = process.env.DATABASE_HOST || 'localhost';
export const DATABASE_PORT: number = Number(process.env.DATABASE_PORT) || 5432;
export const DATABASE_NAME: string = process.env.DATABASE_NAME || 'myDB';
export const DATABASE_SYNCHRONIZE: boolean = Boolean(process.env.DATABASE_SYNCHRONIZE) || true;

Я устанавливаю соединение в app.module, поэтому при запуске приложения.

import {
  DATABASE_TYPE,
  DATABASE_HOST,
  DATABASE_PORT,
  DATABASE_USERNAME,
  DATABASE_PASSWORD,
  DATABASE_NAME,
  DATABASE_SYNCHRONIZE,
} from './config';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: DATABASE_TYPE,
      host: DATABASE_HOST,
      port: DATABASE_PORT,
      username: DATABASE_USERNAME,
      password: DATABASE_PASSWORD,
      database: DATABASE_NAME,
      entities: [],
      synchronize: DATABASE_SYNCHRONIZE,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

К сожалению, я получаю эту ошибку в type поле

Тип 'строка' не может быть назначен типу '' mysql '|"Мариадб" |"postgres" |"таракан" |"sqlite" |"mssql" |"оракул" |"Кордова" |"nativescript" |"Реакция-родная" |"sqljs" |"mongodb" |"Аврора-дата-апи" |"expo" '. ts (2322) MysqlConnectionOptions.d.ts (12, 14): ожидаемый тип происходит из свойства' type ', которое объявлено здесь для типа' TypeOrmModuleOptions '

Я не знаюЯ не хочу передавать в жестко запрограммированной строке, как 'postgres', потому что я хочу, чтобы она сохраняла динамику. Я предпочитаю Postgres, но некоторые клиенты используют базы данных oracle, и я тоже должен поддерживать MSSQL.

Как я могу решить эту проблему конфигурации?

1 Ответ

1 голос
/ 01 октября 2019

Преобразуйте тип вашей базы данных в строку, как показано ниже:

   export const DATABASE_TYPE: any = String(process.env.DATABASE_TYPE) || 'postgres';
...