Typeorm没有在表中保存数据.如何在字体上进行迁移?



我有这个突变

@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数据库中保存数据,但是已经创建了用户表

注意:我第一次运行这个代码,所以我认为我需要创建表和字段,所以不知道如何。如何在字体中创建迁移?

有两种方法可以使用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文档