在 TypeOrmModuleOptions 中将字符串变量传递给 'type'
pass string variable to 'type' in TypeOrmModuleOptions
我想使用 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
字段中收到此错误
Type 'string' is not assignable to type '"mysql" | "mariadb" |
"postgres" | "cockroachdb" | "sqlite" | "mssql" | "oracle" | "cordova"
| "nativescript" | "react-native" | "sqljs" | "mongodb" |
"aurora-data-api" | "expo"'.ts(2322) MysqlConnectionOptions.d.ts(12,
14): The expected type comes from property 'type' which is declared
here on type 'TypeOrmModuleOptions'
我不想传递像 'postgres'
这样的硬编码字符串,因为我希望它保持动态。我更喜欢 Postgres,但有些客户使用 oracle 数据库,我也必须支持 MSSQL。
如何解决该配置问题?
将您的数据库类型转换为字符串,如下所示:
export const DATABASE_TYPE: any = String(process.env.DATABASE_TYPE) || 'postgres';
这对我有用:
TypeOrmModule.forRoot({
type: "sqlite" as any,
host: "localhost",
database: "./database/sqlite"
})
我花了整个周末试图解决这个问题,但被难住了。
有没有人有更好的解决方案或解释?
我想使用 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
字段中收到此错误
Type 'string' is not assignable to type '"mysql" | "mariadb" | "postgres" | "cockroachdb" | "sqlite" | "mssql" | "oracle" | "cordova" | "nativescript" | "react-native" | "sqljs" | "mongodb" | "aurora-data-api" | "expo"'.ts(2322) MysqlConnectionOptions.d.ts(12, 14): The expected type comes from property 'type' which is declared here on type 'TypeOrmModuleOptions'
我不想传递像 'postgres'
这样的硬编码字符串,因为我希望它保持动态。我更喜欢 Postgres,但有些客户使用 oracle 数据库,我也必须支持 MSSQL。
如何解决该配置问题?
将您的数据库类型转换为字符串,如下所示:
export const DATABASE_TYPE: any = String(process.env.DATABASE_TYPE) || 'postgres';
这对我有用:
TypeOrmModule.forRoot({
type: "sqlite" as any,
host: "localhost",
database: "./database/sqlite"
})
我花了整个周末试图解决这个问题,但被难住了。
有没有人有更好的解决方案或解释?