将字符串变量传递给 TypeOrmModuleOptions 中的“type”

我想使用 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" | "蟑螂数据库" | "sqlite" | "mssql" | "神谕" | "科尔多瓦" | “原生脚本” | “反应原生” | "sqljs" | "mongodb" | “极光数据API” | "expo"'.ts(2322) MysqlConnectionOptions.d.ts(12, 14): 预期类型来自属性'type',它在'TypeOrmModuleOptions'类型上声明


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


我该如何解决该配置问题?


牛魔王的故事
浏览 304回答 2
2回答

FFIVE

将您的数据库类型转换为字符串,如下所示:   export const DATABASE_TYPE: any = String(process.env.DATABASE_TYPE) || 'postgres';

慕村225694

这对我有用:TypeOrmModule.forRoot({  type: "sqlite" as any,  host: "localhost",  database: "./database/sqlite"})我花了整个周末试图找出这个问题,但被难住了。有人有更好的解决方案或解释吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript