使用 env 文件的 NestJs TypeORM 配置

问题描述 投票:0回答:2

我有两个 .env 文件,例如

dev.env
staging.env
。我使用 typeorm 作为我的数据库 ORM。我想知道如何让 typeorm 在运行应用程序时读取任一配置文件。
Error: No connection options were found in any of configurations file
来自 typeormmodule。

javascript node.js typescript nestjs typeorm
2个回答
17
投票

您可以创建一个ConfigService,读取环境变量

NODE_ENV
对应的文件:

1) 在启动脚本中设置

NODE_ENV
变量:

"start:dev": "cross-env NODE_ENV=dev ts-node -r tsconfig-paths/register src/main.ts",
"start:staging": "cross-env NODE_ENV=staging node dist/src/main.js",

2)读取ConfigService中对应的.env文件

@Injectable()
export class ConfigService {
  private readonly envConfig: EnvConfig;

  constructor() {
    this.envConfig = dotenv.parse(fs.readFileSync(`${process.env.NODE_ENV}.env`));
  }

  get databaseHost(): string {
    return this.envConfig.DATABASE_HOST;
  }
}

3) 使用

ConfigService
设置数据库连接:

TypeOrmModule.forRootAsync({
  imports:[ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    type: configService.getDatabase()
    // ...
  }),
  inject: [ConfigService]
}),

0
投票

1)我使用

typeorm
来使用迁移,但在这种情况下我想使用两个不同的文件夹进行迁移(表结构)和种子(默认数据到表)

2)所以这就是我在

nestjs
中用
typeorm

解决这个问题的方法
// config for typeorm and used for mysql driver also
import { DataSource, DataSourceOptions } from 'typeorm';
import { config } from 'dotenv';
config();
const { MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, PATH_TO_RUN 
} =
process.env;
export const dbConfig: DataSourceOptions = {
  type: 'mysql',
  host: MYSQL_HOST,
  port: 3306,
  username: MYSQL_USER,
  password: MYSQL_PASSWORD,
  database: MYSQL_DATABASE,
  entities: ['dist/**/*.entity.js'],
  migrations: [`dist/db/${PATH_TO_RUN}/*.js`], // update this path with env
};
export default new DataSource(dbConfig);

3) package.json 使用

cross-env
这用于 typeorm 后看起来像这样

// DON'T PLACE `cross-env` in build script use it in `typeorm` execution script
script: {
"migration:run": "yarn build && cross-env PATH_TO_RUN=migrations yarn typeorm migration:run -d dist/db/mysql.config.js",
"seed:run": "yarn build && cross-env PATH_TO_RUN=seeds yarn typeorm migration:run -d dist/db/mysql.config.js"
}

4) 要运行此 npm 脚本,请使用以下命令

yarn migration:run // 使用 typeorm 中的迁移文件夹

yarn seeds:run // 在 typeorm 中使用种子文件夹

!!在使用 Yarn 和 Cross-env 之前,请确保已安装它!!

npm install --global yarn
yarn add cross-env
© www.soinside.com 2019 - 2024. All rights reserved.