我正在使用TsED框架(基本上是使用TypeScript和ExpressJS)进行后端项目
我还安装了dot-env软件包,以使用自定义环境变量(来自项目根目录的.env文件)来与TypeORM一起使用。
我已成功访问我的环境变量,一切正常,但如果将TypeORM的类型动态设置为'mysql',则会返回以下错误:
期望的类型来自属性“ type”,该属性在此处的“ ConnectionOptions”类型上声明。
我也遇到了类似的问题,尤其是使用TypeORM的'logging'选项时,但是我设法通过转换在config.js文件中检索到的.env变量来解决了这些问题。
到目前为止,我为解决TypeORM的'type'选项所做的事情是:
将我的.env变量投射到DatabaseType,但是它仍然返回相同的错误,
将我的.env变量投射为“ any”类型,但随后返回未定义的变量,
我真的不知道发生了什么。即使我硬编码“ mysql”值而不是检索.env值,它仍然会引发错误。以下代码段显示了我的配置和.env内容,图像显示了错误。
# DATABASE (.env file)
DB_TYPE=mysql
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=123456
DB_NAME=taskline
DB_PORT=3306
DB_SYNCHRONIZE=false
DB_LOGGING=true
// config.js file retrieving my .env variables
import * as env from 'dotenv';
import { LoggerOptions } from 'typeorm/logger/LoggerOptions';
env.config();
const config = {
"DB_DRIVER": 'mysql',
"DB_HOST": process.env.DB_HOST,
"DB_USERNAME": process.env.DB_USERNAME,
"DB_PASSWORD": process.env.DB_PASSWORD,
"DB_NAME": process.env.DB_NAME,
"DB_PORT": parseInt(process.env.DB_PORT) as number,
"DB_SYNCHRONIZE": Boolean(process.env.DB_SYNCHRONIZE) as boolean,
"DB_LOGGING": process.env.DB_LOGGING as LoggerOptions
};
export { config };
我想知道为什么会发生此错误,以及如何解决或绕过它?
答案 0 :(得分:0)
可以使用any
类型覆盖TypeOrm驱动程序连接选项,如下所示。
const DB_DRIVER: any = process.env.DB_DRIVER || 'mysql';
const config = {
"DB_DRIVER": DB_DRIVER,
"DB_HOST": process.env.DB_HOST,
"DB_USERNAME": process.env.DB_USERNAME,
"DB_PASSWORD": process.env.DB_PASSWORD,
"DB_NAME": process.env.DB_NAME,
"DB_PORT": parseInt(process.env.DB_PORT) as number,
"DB_SYNCHRONIZE": Boolean(process.env.DB_SYNCHRONIZE) as boolean,
"DB_LOGGING": process.env.DB_LOGGING as LoggerOptions
};