在Nest.js中使用TypeORM实现数据库迁移主要涉及以下步骤:
1. 配置TypeORM模块
首先,确保你已经安装了@nestjs/typeorm
和typeorm
包。然后在你的Nest.js项目中配置TypeORM模块。可以在根模块(通常是AppModule
)中导入TypeOrmModule
并使用forRoot
方法配置数据库连接。
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', // 数据库类型 host: 'localhost', port: 5432, username: 'user', password: 'pass', database: 'test', entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: false, // 生产环境建议设置为false }), ], }) export class AppModule {}
2. 创建迁移脚本
你可以手动创建迁移脚本,也可以使用TypeORM的CLI工具自动生成。为了使用CLI工具,你需要添加一个ormconfig.json
文件在你的项目根目录,这个文件包含同样的数据库连接配置。
json{ "type": "postgres", "host": "localhost", "port": 5432, "username": "user", "password": "pass", "database": "test", "entities": ["dist/**/*.entity.js"], "migrationsTableName": "migration", "migrations": ["dist/migration/*.js"], "cli": { "migrationsDir": "src/migration" } }
然后,你可以运行以下命令来生成一个迁移文件:
bashnpx typeorm migration:create -n MigrationName
3. 编写迁移逻辑
在生成的迁移文件中,你需要编写up
和down
方法,这些方法分别定义如何应用迁移和如何回滚迁移。例如:
typescriptimport { MigrationInterface, QueryRunner } from 'typeorm'; export class MigrationName implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(`CREATE TABLE "user" (...);`); } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(`DROP TABLE "user";`); } }
4. 运行迁移
为了应用迁移,你可以使用TypeORM的CLI工具来运行迁移:
bashnpx typeorm migration:run
如果需要回滚最近的迁移,可以使用:
bashnpx typeorm migration:revert
实例
例如,假设我们需要在用户表中添加一个新的列age
。首先,我们会生成一个迁移文件,然后在up
方法中添加一个新列,down
方法中删除这个列。
typescriptimport { MigrationInterface, QueryRunner } from 'typeorm'; export class AddUserAge1600000000000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(`ALTER TABLE "user" ADD "age" int;`); } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "age";`); } }
然后运行迁移将应用这个更改。
这样,就完成了在Nest.js项目中使用TypeORM进行数据库迁移的基本流程。这些步骤确保了数据库结构的版本控制和变更管理。
2024年7月31日 00:54 回复