我想用.env文件设置 TypeORM 的配置,但是当我尝试运行迁移脚本时遇到问题。
我做了什么:
1.在包中添加脚本.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.在应用程序中导入类型模块*
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一起使用。请告诉我,我的情况出了什么问题?
关于错误消息,您应该在根项目中添加ormconfig.json。在这种情况下,.env 文件不相关。
检查导入ConfigModule.forRoot()
。应先导入
如果 env 文件中使用这些变量,则不能将 forRootAsync 用于 TypeOrmModule
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"
我遇到了同样的问题。我按照本文中的配置说明解决了这个问题,该说明向您展示了如何生成动态ormconfig.json
文件:
https://medium.com/@gausmann.simon/nestjs-typeorm-and-postgresql-full-example-development-and-project-setup-working-with-database-c1a2b1b11b8f
额外的设置有点烦人,但它有效。
如果您使用的是打字稿,请注意 - 这篇文章来自 2019 年,根据 nestjs 的 2020 年更新,您需要更改src
路径以允许config.service.ts
文件中src
或dist
,例如。 更改为以下内容(取决于您的文件结构(:
entities: ['**/*.entity{.ts,.js}'],
migrationsTableName: 'migration',
migrations: ['src/migration/*.ts'],
cli: {
migrationsDir: 'src/migration',
},
自
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
migrationsTableName: 'migration',
migrations: [__dirname + '/../migration/*{.ts,.js}'],
cli: {
migrationsDir: 'src/migration',
},