Chr*_*les 8 typescript graphql typeorm typegraphql
我有两个相关模型:
1.- 角色实体
import { Column, Entity, BaseEntity, OneToMany, PrimaryColumn } from "typeorm";
import { Field, ObjectType } from "type-graphql";
import { UserEntity } from "./user.entity";
@ObjectType()
@Entity({
name: "tb_roles"
})
export class RoleEntity extends BaseEntity {
@Field()
@PrimaryColumn({
name: "id",
type: "character varying",
length: 5
})
id!: string;
@Field()
@Column({
name: "description",
type: "character varying",
nullable: true
})
description!: string
@Field(() => [UserEntity])
@OneToMany(() => UserEntity, user => user.role)
users!: UserEntity[];
}
Run Code Online (Sandbox Code Playgroud)
2.- 用户实体
import {Field, ObjectType} from "type-graphql";
import { BaseEntity, Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
import { RoleEntity } from "./role.entity";
@ObjectType()
@Entity({
name: "tb_users"
})
export class UserEntity extends BaseEntity {
@Field()
@PrimaryGeneratedColumn("uuid", {
name: "id"
})
id!: string;
@Field()
@Column({
name: "username",
type: "character varying",
unique: true,
nullable: false
})
username!: string;
@Field()
@Column({
name: "last_name",
type: "character varying",
nullable: false
})
lastName!: string;
@Field()
@Column({
name: "mother_last_name",
type: "character varying",
nullable: true
})
motherLastName!: string;
@Field()
@Column({
name: "first_name",
type: "character varying",
nullable: false
})
firstName!: string;
@Field()
@Column({
name: "middle_name",
type: "character varying",
nullable: true
})
middleName!: string;
@Field()
@Column({
name: "email",
type: "character varying",
unique: true,
nullable: false
})
email!: string;
@Field()
@Column({
name: "password",
type: "character varying",
nullable: false
})
password!: string;
@Field(() => RoleEntity)
@ManyToOne(() => RoleEntity)
@JoinColumn({name: "role_id"})
role!: RoleEntity;
@Field()
@Column({
name: "is_active",
type: "character varying",
nullable: true
})
isActive!: boolean;
@Field()
@CreateDateColumn({
name: "created_at"
})
createdAt!: string;
@Field()
@UpdateDateColumn({
name: "updated_at"
})
updatedAt!: string;
}
Run Code Online (Sandbox Code Playgroud)
这是用户的解析器:
import {Arg, Mutation, Query, Resolver} from "type-graphql";
import bcrypt from "bcryptjs";
import {UserEntity} from "../../entity/user.entity";
import {RoleEntity} from "../../entity/role.entity";
@Resolver()
export class UserResolver {
@Query(() => [UserEntity])
async users() {
return await UserEntity.find();
}
@Mutation(() => UserEntity)
async createUser(
@Arg('username') username: string,
@Arg('lastName') lastName: string,
@Arg('motherLastName') motherLastName: string,
@Arg('firstName') firstName: string,
@Arg('middleName') middleName: string,
@Arg('email') email: string,
@Arg('password') password: string,
@Arg('role') role: RoleEntity,
@Arg('isActive') isActive: boolean
): Promise<UserEntity> {
const hashedPassword = await bcrypt.hashSync(password, bcrypt.genSaltSync(10));
const user = UserEntity.create({
username,
lastName,
motherLastName,
firstName,
middleName,
email,
password: hashedPassword,
role,
isActive
}).save();
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
(节点:14788)UnhandledPromiseRejectionWarning:错误:无法确定“UserResolver”类的“createUser”的名为“role”的参数的 GraphQL 输入类型。用作 TS 类型或显式类型的值是否使用正确的装饰器进行装饰,或者它是正确的输入值吗?
我需要你的帮助。
Pet*_*uza 11
该错误是因为您不能ObjectType在mutations\xc2\xb9中使用参数,只能使用普通标量类型或InputType:
\n https://typegraphql.com/docs/resolvers.html#input-types
\xc2\xb9:RoleEntity您的情况下的 ObjectType。
我解决了我的问题,我修改了我的两个模型,在 UserEntity 中我删除了:
@Field(() => RoleEntity)
@ManyToOne(() => RoleEntity)
@JoinColumn({name: "role_id"})
role!: RoleEntity;
Run Code Online (Sandbox Code Playgroud)
我添加了
@Field()
@Column({name: 'role_id'})
roleId!: string;
@Field(() => RoleEntity)
role!: RoleEntity;
@ManyToOne(() => RoleEntity, role => role.userConnection)
@JoinColumn({name: 'role_id'})
roleConnection!: Promise<RoleEntity>
Run Code Online (Sandbox Code Playgroud)
在 RoleEntity 中,我添加了:
@OneToMany(() => UserEntity, user => user.roleConnection)
userConnection!: Promise<UserEntity[]>
Run Code Online (Sandbox Code Playgroud)
但是,我不知道我是否以正确的方式进行测试(游乐场):
query users {
users {
firstName
username
roleId
role {
description
}
}
}
Run Code Online (Sandbox Code Playgroud)
部分错误是:
"message": "不能为不可为 null 的字段 UserEntity.role 返回 null。",
有人可以向我解释一下,错误是什么或在哪里?
谢谢。
| 归档时间: |
|
| 查看次数: |
14588 次 |
| 最近记录: |