当我尝试查询我的memberList解析器时,我收到此错误,它需要返回一个membeTypeID,但它返回null - 如果这有帮助的话,我正在使用Apollo:
"errors": [
{
"message": "Cannot return null for non-nullable field Member.memberType.",
"locations": [
{
"line": 5,
"column": 3
}
],
"path": [
"memberList",
0,
"memberType"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"stacktrace": [
"Error: Cannot return null for non-nullable field Member.memberType.",
这是我的查询:
query MemberList {
memberList{
firstName
id
memberType{id}
}
}
这是我使用 typeORM 和 Graphql 的成员实体的片段:
/** Reference to type of member. */
@ManyToOne(() => MemberType, (memberType) => memberType.memberType, { eager: true })
// @JoinColumn({referencedColumnName: 'testing'})
@Field(() => MemberType)
memberType!: MemberType;
这里是成员类型实体的片段:
/** ID number of a member type. */
@PrimaryGeneratedColumn('increment')
@Field()
id!: number;
/** Type that a member can be. */
@OneToMany(() => Member, (member) => member.memberType)
@Field()
memberType!: string;
这是会员名单:
/** Get an array of all members */
@Query(() => [ Member ], { nullable: true })
async memberList(): Promise<Member[] | null>{
const memberList = await Member.find();
return memberList;
}
当我尝试运行以下突变的查询时,它也会抛出相同的错误:
/** Update a member with new details */
@Mutation(() => Member, {nullable: true })
async memberUpdate(
@Arg('input') input: MemberUpdateInput,
@Ctx() { request }: AppContext
): Promise<Member | null> {
input.throwIfInvalid();
const { userID } = request.session;
const existingUser = await User.findOneBy({ id: userID });
if (!existingUser) {
throw new AuthenticationError;
}
const existingMember = await Member.findOneBy({ id: input.id });
if (!existingMember) {
throw new FormError({
control: [ `Member '${input.firstName} ${input.lastName}' does not exist!` ]
});
}
const memberTypeInput = new IdNumberInput();
memberTypeInput.id = input.memberType.id;
const memberType = await new MemberTypeResolver().memberTypeDetails(memberTypeInput);
await Member.update({ id: input.id }, {
firstName: input.firstName,
githubUrl: input.githubUrl,
lastName: input.lastName,
linkedinUrl: input.linkedinUrl,
memberType: memberType,
personalUrl: input.personalUrl,
photoUrl: input.photoUrl
});
const updatedMember = await Member.findOneBy({ id: input.id });
Member.save;
console.log(updatedMember?.memberType);
if (!updatedMember) {
throw new ServerError;
}
return updatedMember;
}
这是我给出的输入
{
"input": {
"id": "48b76f72-1348-4708-8d09-471cc82def13",
"firstName": "foob",
"lastName": "bar",
"memberType": {
"id": 2
},
"photoUrl": "testingPhoto"
}
}
这是输入类型:
@InputType()
export class MemberUpdateInput extends UuidInput {
@Field()
firstName!: string;
@Field(() => String, { nullable: true })
githubUrl?: string;
@Field()
lastName!: string;
@Field(() => String, { nullable: true })
linkedinUrl?: string;
@Field(() => IdNumberInput)
memberType!: IdNumberInput;
@Field(() => String, { nullable: true })
personalUrl?: string;
@Field()
photoUrl!: string;
我已将 memberType 设置为可选,只是为了查看它给出的内容并返回 null,我还尝试将 Member 实体中的 memberType 设为与表 OneToOne 的数字,但这也不起作用。
看起来memberType没有被拉入findbyOne或find中,这是updatedMember返回的内容:
Member {
createdAt: 2023-10-07T09:56:27.589Z,
firstName: 'testin',
githubUrl: null,
id: '8c636b7b-4d83-4681-a912-87aee5a95c2e',
lastName: 'bar',
linkedinUrl: null,
personalUrl: null,
photoUrl: 'testThing',
updateAt: 2023-10-07T09:56:27.589Z,
memberType: MemberType {
createdAt: 2023-10-07T09:21:01.670Z,
id: 1,
updateAt: 2023-10-07T09:21:01.670Z
}
}
这是memberList[0]:
Member {
createdAt: 2023-10-07T09:56:27.589Z,
firstName: 'testin',
githubUrl: null,
id: '8c636b7b-4d83-4681-a912-87aee5a95c2e',
lastName: 'bar',
linkedinUrl: null,
personalUrl: null,
photoUrl: 'testThing',
updateAt: 2023-10-07T09:56:27.589Z,
memberType: MemberType {
createdAt: 2023-10-07T09:21:01.670Z,
id: 1,
updateAt: 2023-10-07T09:21:01.670Z
}
}
好吧,我将 OneToMany 关系放在成员类型实体中的错误列上:
这是更新后的 MemberType 实体
/** ID number of a member type. */
@PrimaryGeneratedColumn('increment')
@OneToMany(() => Member, (member) => member.memberType)
@Field()
id!: number;
/** Type that a member can be. */
@Column()
@Field()
memberType!: string;
这是会员实体memberType 列:
/** Reference to type of member. */
@ManyToOne(() => MemberType, (memberType) => memberType.memberType, { eager: true })
@JoinColumn({name: 'memberTypeID'})
@Field(() => MemberType)
memberType!: MemberType;
这是我现在查询数据的方式:
query MemberList {
memberList{
firstName
id
memberType{
memberType
}
}
}