Typescript 使用NestJS和TypeORM为项目生成迁移文件
我试图为实体生成迁移文件,但每当我运行命令创建实体时,它都会创建一个“空”文件,只创建up和down方法 我在package.json文件中添加了这个脚本:Typescript 使用NestJS和TypeORM为项目生成迁移文件,typescript,nestjs,typeorm,Typescript,Nestjs,Typeorm,我试图为实体生成迁移文件,但每当我运行命令创建实体时,它都会创建一个“空”文件,只创建up和down方法 我在package.json文件中添加了这个脚本:“typeorm”:“node——需要ts node/register/node\u modules/typeorm/cli.js” 在my app.module.ts中,连接配置如下: TypeOrmModule.forRoot({ type: 'mysql', host: database().host,
“typeorm”:“node——需要ts node/register/node\u modules/typeorm/cli.js”
在my app.module.ts中,连接配置如下:
TypeOrmModule.forRoot({
type: 'mysql',
host: database().host,
port: parseInt(database().port),
username: database().username,
password: database().password,
database: database().schema,
entities: [Question, QuestionOption],
migrations: ['src/migration/*{.ts,.js}'],
cli: {
migrationsDir: 'src/migration'
},
synchronize: true,
})
其中database()
是一个nestjs配置文件,从.env文件中获取值
我用来创建迁移的脚本是:npm run typeorm migration:create--n QuestionTables-d src/migrations
,其中需要指定-d,否则不会创建迁移文件(即使在forRoot方法的cli中指定了它)
我是否需要手动编写SQL来创建表
如果我需要向现有表中添加一个新列,我应该创建一个新的迁移文件并手动编写SQL代码来添加它吗
我尝试运行的另一个命令是:
npm run typeorm migration:generate--n QuestionTables-d src/migrations
这里它给了我一个错误:“错误:在任何orm配置文件中都找不到连接选项。”命令npm run typeorm migration:create
将生成空的迁移文件
迁移自动生成的命令是:npm run typeorm migration:generate
正如您收到的错误中所述,您需要为cli指定配置文件。这意味着应该将传递到forRoot
的配置提取到ts/json文件。为此,您需要两个文件,一个用于服务器连接,另一个用于迁移配置
例如:
// ormconfig.ts
export const config: TypeOrmModuleOptions = {
type: 'mysql',
host: database().host,
port: parseInt(database().port),
username: database().username,
password: database().password,
database: database().schema,
entities: [Question, QuestionOption], // maybe you should also consider chage it to something like: [__dirname + '/**/*.entity.ts', __dirname + '/src/**/*.entity.js']
migrations: ['src/migration/*{.ts,.js}'],
cli: {
migrationsDir: 'src/migration'
},
synchronize: true,
}
好的,现在如果我运行命令npm run migration generate Test,它会说在数据库模式中没有发现任何更改-无法生成迁移。我是否需要创建迁移并手动编写其中的SQL代码来创建表?您是否已经创建了表?如果是,则清除模式,删除表或删除模式然后重新创建它,然后运行migration generate。此错误表示您的数据库中已经有与项目中的实体匹配的表。还没有,我的数据库是空的。迁移表中有迁移吗?我从数据库中删除了所有内容,只有一个数据库没有任何表。如果我运行npm运行migration generate,我收到一条消息,说在数据库架构中找不到任何更改。如果我运行migration create,它会在migration文件夹中创建一个文件,但up和down方法为空。它应该使用一些SQL代码创建一个迁移文件,还是我需要编写该SQL代码?
// ormconfig-migrations.ts
import {config} from './ormconfig';
export = config;
import {config} from './ormconfig';
TypeOrmModule.forRoot(config);
// package.json
"scripts": {
...
"typeorm:cli": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli -f ./ormconfig-migrations.ts",
"migration-generate": "npm run typeorm:cli -- migration:generate -n"
}