[GraphQL/Apollo] defined in resolvers, but not in schema

Hyo Kyun Lee·2021년 12월 10일
0

GraphQL/Apollo

목록 보기
6/7

1. schema(계획서)와 Query, Mutation(실제 Query 구조)는 동일해야 한다.

defined in resolvers, but not in schema 문제는 schema에서 작성한 Query 계획서와 실제 Query 및 resolvers 구조가 다르기 때문에 발생한다.

특히 resolvers의 logic에서 발생하였을 확률이 높은데, schema와 동일하게 작성하였는지 확인하는 것이 필요하다.

2. schema 확인

먼저 resolvers에 활용할 구조를 정의한다.
아래와 같이 Date(상수값), Query, Mutation을 구성해주었기 때문에, resolvers에서 사용할 수 있는 구조는 Query, Mutation뿐이다.

const typeDef = gql`
  sclar Date
  type Query {
    
  }
  type Mutation {
    
  }
`;

schema에서 typeDefs와 resolvers를 import한다.

const schema = makeExecutableSchema({
  typeDefs: [
    typeDef,
    
  ],
  resolvers: [
  	resolvers
  ]
})

3. resolver 확인

typeDef에서 resolvers에 사용할 형식을 지정해준다.
아래 User 형식의 경우 return을 받아올 구조 및 형태를 나타내며, 실질적으로 API로 사용할 구조는 extend type Query에서 작성한다(**graphQL에서는 User도 Query로 인식하기 때문에, 중복을 제거하기 위해 extend 사용).

export const typeDef = gql`
    type User {
        
    }

    extend type Query {
        getpostview: PostView
    }
`;

이후 resolvers를 작성하는데, schema와 resolver typeDef에서 작성한 구조를 준수하였는지 유의해가면서 진행한다.
특히 schema에서 Query를 사용하고, 해당 Query 내부에서 API를 선언해주었으므로 API에 대한 동작을 구성해주기 위해선 Query : {} 객체 내부에서 작성하도록 한다.

export const resolvers = {
    Query: {
        getpostview: async () => {
            const model = db.PostView.findAll();
    
            return model;
        }
    }

4. 참조링크

https://stackoverflow.com/questions/56049480/error-user-defined-in-resolvers-but-not-in-schema

0개의 댓글