我想使用TypeORM为我的NestJs应用设置数据库连接。我有一个配置文件,该文件从.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字段遇到此错误


  类型'string'不能分配给类型'“ mysql” | “ mariadb” |
  “ postgres” | “ cockroachdb” | “ sqlite” | “ mssql” | “甲骨文” | “科尔多瓦”
  | “本机” | “本机” | “ sqljs” | “ mongodb” |
  “ aurora-data-api” | “ expo”'。ts(2322)MysqlConnectionOptions.d.ts(12,
  14):期望的类型来自声明的属性“ type”
  在这里输入'TypeOrmModuleOptions'


我不想传递像'postgres'这样的硬编码字符串,因为我希望它保持动态。我更喜欢Postgres,但有些客户使用oracle数据库,我也必须支持MSSQL。

如何解决该配置问题?

最佳答案

将您的数据库类型转换为字符串,如下所示:

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

09-25 18:20
查看更多