• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

graphQL 에러 문제

23.05.20 16:07 작성 23.05.20 16:12 수정 조회수 358

0

안녕하세요. 그래프큐엘 관련 에러가 해결이 되지 않아 질문드립니다.

아래와 같은 Member, Dibs 엔티티가 있습니다.

@Entity()
@ObjectType()
export class Dibs {
    @ManyToOne(() => Member, { primary: true })
    @Field(() => Member)
    member: Member;

    @ManyToOne(() => Campground, { primary: true })
    @Field(() => Campground)
    campground: Campground;

    @DeleteDateColumn()
    deletedAt: Date;
}
@Entity()
@ObjectType()
// @InputType()
export class Member {
    @PrimaryColumn()
    @Field(() => String)
    memberId: string;

    @Column({ nullable: false })
    @Field(() => String)
    password: string;

    @Column({ nullable: false })
    @Field(() => String)
    nickname: string;

    @Column({ nullable: false })
    @Field(() => String)
    email: string;

    @Column({ nullable: false })
    @Field(() => String)
    name: string;

    @Column({ nullable: false })
    @Field(() => String)
    phoneNumber: string;
}

그런데 Member 클래스를 다른 엔티티 클래스에서 외래키로 지정해주면 오류가 발생합니다.
코드를 보시면 Dibs 엔티티에서 Member를 @Field(() => Member) 데코레이터로 지정하여 그래프큐엘 필드로 지정해주는데 아래의 오류가 발생합니다.

Error: Cannot determine a GraphQL input type ("Member") for the "member". Make sure your class is decorated with an appropriate decorator.

인터넷에 찾아보니 Member 클래스에 InputType 데코레이터를 지정해주라고 돼있는데 강의 예제코드에선 특정 클래스를 다른 엔티티에서 외래키로 활용할 때 그 클래스에 ObjectType만 지정하고 InputType은 지정해주지 않아도 잘 작동하였습니다.

Member클래스 뿐만 아니라 외래키로 활용되는 모든 클래스에서 오류가 발생하고 있습니다. 해당 클래스들에 InputType을 지정하면 오류가 사라지긴 하나 아래와 같은 다른 오류가 또 발생합니다.

Error: Schema must contain uniquely named types but contains multiple types named "Member".

 

이틀 동안 여러가지 찾아보고 해결을 시도해봤지만 잘 안되네요. 도움 부탁드립니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.21

안녕하세요, 인프런 AI 인턴이에요.

해당 오류는 Member 클래스가 GraphQL input type으로 인식되지 않아 발생하는 것 같습니다. Member 클래스를 다른 엔티티 클래스에서 외래키로 지정할 때 InputType 데코레이터를 추가해주어야 하는데, 해당 클래스를 ObjectType으로만 지정해준 경우에는 오류가 발생하지 않을 수 있습니다.

하지만 이 경우에는 Member 클래스가 Input 타입이 아닌데 Dibs 클래스에서 Member 필드를 @Field(() => Member) 로 지정해줌으로써 오류가 발생한 것 같습니다. 따라서 Member 클래스에 @InputType 데코레이터를 추가해줌으로써 해당 오류를 해결할 수 있을 것 같습니다.

하지만 추가로 “Multiple types named “Member”” 오류가 발생하는 것으로 봐서, 같은 이름의 타입이 여러 개 있어서 발생하고 있는 것 같습니다. 이 경우에는 각 타입의 이름을 다르게 설정해주어야 합니다.

이와 같은 방식으로 해결이 되지 않는 경우, schema의 정의를 확인해봐야 할 것 같습니다. schema 정의가 제대로 되어있지 않으면 이와 같은 오류가 발생할 수 있습니다.

도움이 되었길 바랍니다. 감사합니다.