如何在Nest.JS中设置ORM类型witth.env文件的配置

时间:2020-06-03 21:15:16

标签: javascript node.js nestjs typeorm

我想使用 .env 文件设置TypeORM的配置,但是在尝试运行迁移脚本时遇到问题。

我做了什么:

1。将脚本添加到package.json

    "migration:generate": "node_modules/.bin/typeorm migration:generate -n",
    "migration:run": "node_modules/.bin/typeorm migration:run",
    "migration:revert": "node_modules/.bin/typeorm migration:revert",

2。在app.module中导入TypeOrmModule *

    TypeOrmModule.forRootAsync({
        imports: [ConfigModule],
        inject: [ConfigService],
        useFactory: (configService: ConfigService) => ({
          type: 'mysql',
          host: configService.get('HOST'),
          port: +configService.get<number>('PORT'),
          username: configService.get('DATABASE_USERNAME'),
          password: configService.get('DATABASE_PASSWORD'),
          database: configService.get('DATABASE'),
          entities: [__dirname + '/**/*.entity{.ts,.js}'],
          synchronize: true,
        })
      }
    )],

3。在根文件夹中读取了.env文件

    HOST=localhost
    PORT=5432
    DATABASE_USER=dbuser
    DATABASE_PASSWORD=dbpassword
    DATABASE=dbname

现在我正在尝试运行这样的迁移脚本:

npm run migration:generate -n AddUserTable

我收到这样的错误:

Error during migration generation:
Error: No connection options were found in any orm configuration files.

根据文档,它应该是 ormconfig.json ,但它也应与 .env 一起使用。请告诉我,我的情况是什么?

3 个答案:

答案 0 :(得分:0)

关于错误消息,您应该在根项目中添加ormconfig.json。 .env文件在这种情况下不相关。

答案 1 :(得分:0)

检查导入ConfigModule.forRoot()。应该先导入

如果在环境文件中使用这些变量,则不能对TypeOrmModule使用forRootAsync

TYPEORM_CONNECTION = postgres
TYPEORM_HOST = localhost
TYPEORM_PORT = 5432
TYPEORM_USERNAME = postgres
TYPEORM_PASSWORD = 12345
TYPEORM_DATABASE = postgres
TYPEORM_SYNCHRONIZE = false
TYPEORM_MIGRATIONS_RUN = false
TYPEORM_ENTITIES = src/modules/**/*.entity.ts
TYPEORM_MIGRATIONS = db/migrations/*.ts
TYPEORM_LOGGING = true

https://github.com/typeorm/typeorm/blob/master/docs/using-ormconfig.md#using-environment-variables

您也可以尝试以下脚本:

"migration:run": "ts-node --project ./tsconfig.json -r tsconfig-paths/register node_modules/typeorm/cli.js migration:run",
"migration:revert": "ts-node --project ./tsconfig.json -r tsconfig-paths/register node_modules/typeorm/cli.js migration:revert",
"migration:create": "ts-node --project ./tsconfig.json -r tsconfig-paths/register node_modules/typeorm/cli.js migration:create",
"migration:generate": "ts-node --project ./tsconfig.json -r tsconfig-paths/register node_modules/typeorm/cli.js migration:generate"

答案 2 :(得分:0)

我遇到了同样的问题。我按照本文中的配置说明解决了该问题,该说明向您展示了如何生成动态ormconfig.json文件:

https://medium.com/@gausmann.simon/nestjs-typeorm-and-postgresql-full-example-development-and-project-setup-working-with-database-c1a2b1b11b8f

额外的设置有点烦人,但可以。

请注意,如果您使用的是打字稿-该文章来自2019年,并且每2020年对nestjs进行更新,您都需要更改src路径以允许使用src或{{1} dist文件中的},例如更改为以下内容(取决于您的文件结构):

config.service.ts

      entities: ['**/*.entity{.ts,.js}'],

      migrationsTableName: 'migration',

      migrations: ['src/migration/*.ts'],

      cli: {
        migrationsDir: 'src/migration',
      },