乐闻世界logo
搜索文章和话题

How do you implement database migrations in Nest.js using TypeORM?

2 个月前提问
1 个月前修改
浏览次数33

1个答案

1

在Nest.js中使用TypeORM实现数据库迁移主要涉及以下步骤:

1. 配置TypeORM模块

首先,确保你已经安装了@nestjs/typeormtypeorm包。然后在你的Nest.js项目中配置TypeORM模块。可以在根模块(通常是AppModule)中导入TypeOrmModule并使用forRoot方法配置数据库连接。

typescript
import { 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" } }

然后,你可以运行以下命令来生成一个迁移文件:

bash
npx typeorm migration:create -n MigrationName

3. 编写迁移逻辑

在生成的迁移文件中,你需要编写updown方法,这些方法分别定义如何应用迁移和如何回滚迁移。例如:

typescript
import { 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工具来运行迁移:

bash
npx typeorm migration:run

如果需要回滚最近的迁移,可以使用:

bash
npx typeorm migration:revert

实例

例如,假设我们需要在用户表中添加一个新的列age。首先,我们会生成一个迁移文件,然后在up方法中添加一个新列,down方法中删除这个列。

typescript
import { 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 回复

你的答案