【问题标题】:Typeorm is not saving data in table. How to do Migrations in typeorm?Typeorm 没有在表中保存数据。如何在 typeorm 中进行迁移?
【发布时间】:2021-05-24 20:03:36
【问题描述】:

我有这个突变

@Mutation(() => AuthResponse, { nullable: true })
  async signUp(
    @Ctx() { req }: MyContext,
    @Arg("details") details: UsernamePasswordTypes
  ): Promise<AuthResponse> {
    const { password, username } = details;
    const user = await User.create({
      username,
      password: "hasedPassword"
    });
    
    try {
      await user.save();
      req.session.userId = user.id;
      console.log("USER CREATED",user)
      return {user}
    } catch (e) {
      return {
        errors: [
          {
            field: "username",
            message: "username already taken",
          },
        ],
      };
    }
  }

在这我可以看到USER created

我有两个问题

  • 控制台中没有打印密码字段
  • 它没有在 postgres db 中保存数据,但它已经创建了用户表

注意:我是第一次运行此代码,所以我想我需要创建表和字段,所以不知道如何创建。如何在 typeorm 中创建迁移?

【问题讨论】:

    标签: node.js postgresql typeorm


    【解决方案1】:

    您有两种使用 TypeOrm 创建迁移的方法。

    您必须使用两种方法填写迁移代码:向上和向下。 up 必须包含执行迁移所需的代码。 down 必须恢复任何 up 改变。 down 方法用于恢复上次迁移。

    您可以使用 typeorm migration:create -n migrationName 添加您的 updown 说明手动创建它们:

    import { MigrationInterface, QueryRunner } from 'typeorm';
    
    export class PostRefactoringTIMESTAMP implements MigrationInterface {
    
        async up(queryRunner: QueryRunner): Promise<void> {
            await queryRunner.query(`CREATE TABLE "users" ("create_date" TIMESTAMP NOT NULL DEFAULT now(), "update_date" TIMESTAMP NOT NULL DEFAULT now(), "delete_date" TIMESTAMP, "id" SERIAL NOT NULL, "firstName" character varying NOT NULL, "lastName" character varying NOT NULL, "email" character varying NOT NULL, "phone" character varying, "password" character varying NOT NULL)`);
        }
    
        async down(queryRunner: QueryRunner): Promise<void> {
            await queryRunner.query(`DROP TABLE "users"`);
        }
    }
    

    否则,您可以使用 typeorm migration:generate -n generatedMigrationName 从您的实体生成它们。

    迁移完成后,您可以使用 typeorm migration:runtypeorm migration:revert 运行它们以使用 down 方法。

    不要忘记正确设置连接选项:

    {
        "type": "mysql",
        "host": "localhost",
        "port": 3306,
        "username": "test",
        "password": "test",
        "database": "test",
        "entities": ["entity/*.js"],
        "migrationsTableName": "custom_migration_table",
        "migrations": ["migration/*.js"],
        "cli": {
            "migrationsDir": "migration"
        }
    }
    

    如果您有更多问题,请阅读TypeOrm documentation about migrations

    【讨论】:

    • 定义实体后是否需要写sql创建表?
    • 不,您可以通过使用typeorm migration:generate 生成迁移来避免编写SQL。如果你想在没有 SQL 的情况下手动编写,可以使用TypeOrm migration API
    猜你喜欢
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 2021-04-29
    • 2020-11-07
    • 2021-05-23
    • 2021-12-05
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多