我有这个突变
@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
添加up
和down
指令手动创建它们:
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:run
和typeorm 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文档