• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

에러가 뜨네요 수강 강의 내용에도 전체 내용이 없어서 안되네요 전체 코드는 제공이 안되나요??

24.04.03 16:45 작성 24.04.03 17:34 수정 조회수 92

0

import { ApolloServer } from '@apollo/server'
import { startStandaloneServer } from '@apollo/server/standalone'


const typeDefs = `#graphql   
    input CreateBoardInput {
        writer: String
        title: String
        contents: String
    }

    type MyResult {
        number: Int
        writer: String
        title: String
        contents: String
    }

    type Query {
        #fetchboards: MyResult    #객체 1개를 의미
        fetchboards: [MyResult]   # 배열 안에 객체 1개 이상을 의미!
    }

    type Mutation {
        # createBoard(writer: String, title: String, contents: String): String
        createBoard(createBoardInput: CreateBoardInput!): String
    }`;


const resolvers = {      
    Query: {
        fetchBoards: (parent, args, context, info) => {
          // 1. 데이터를 조회하는 로직 => DB에 접속해서 데이터 꺼내오기
          const result = [
            {
              number: 1,
              writer: '철수',
              title: '제목입니다~~',
              contents: '내용이에요@@@',
            },
            {
              number: 2,
              writer: '영희',
              title: '영희 제목입니다~~',
              contents: '영희 내용이에요@@@',
            },
            {
              number: 3,
              writer: '훈이',
              title: '훈이 제목입니다~~',
              contents: '훈이 내용이에요@@@',
            },
          ];
    
          // 2. 꺼내온 결과 응답 주기
          return result;
        },
      },

    Mutation: {
        createBoard: (_, args) => {
          // 1. 브라우저에서 보내준 데이터 확인하기
          console.log(args);
                console.log("=========================")
          console.log(args.createBoardInput.writer)
          console.log(args.createBoardInput.title)
          console.log(args.createBoardInput.contents)
    
                // 2. DB에 접속 후, 데이터를 저장 => 데이터 저장했다고 가정
    
          // 3. DB에 저장된 결과를 브라우저에 응답(response) 주기
          return "게시물 등록에 성공하였습니다!!";
        },
      },
    };


const server = new ApolloServer({
    typeDefs: typeDefs,
    resolvers: resolvers,
    cors: true,  // 모든 사이트 허용하고 싶을 때
    // cors: { origin: ["https://naver.com", "https://daum.net"] } // 특정 사이트만 지정하고 싶을 때
  });

startStandaloneServer(server)  // 4000

node_modules/@graphql-tools/schema/esm/addResolversToSchema.js:62

throw new Error(`${typeName}.${fieldName} defined in resolvers, but not in schema`);

at file:///Users/youssipro/Desktop/project/backend/class/section03/03-06-graphql-api-apollo-server-board/index.js:78:16

 

답변 2

·

답변을 작성해보세요.

0

동호님,

안녕하세요! 답변이 늦었습니다.

support@codebootcamp.co.kr로 연락주시면, 관련한 코드 받을 수 있도록 도와드릴께요!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.05

안녕하세요, 인프런 AI 인턴입니다.

제출하신 코드와 에러 메시지를 보면, 스키마 정의와 리졸버(resolver) 함수 사이에 이름 불일치 이슈가 발생한 것으로 보입니다. 에러 메시지는 fetchBoards라는 쿼리가 리졸버에 정의되어 있지만 스키마에는 등록되어 있지 않다고 나타내고 있습니다. 실제로 스키마에서는 fetchboards로 되어 있는 반면 리졸버에서는 fetchBoards로 대소문자 구분하여 사용하고 있습니다.

GraphQL에서는 대소문자를 구별하기 때문에 정확하게 일치해야 합니다. 이 문제를 해결하려면 스키마 정의에서의 쿼리 이름과 리졸버에서의 쿼리 이름을 동일하게 맞춰야 합니다.

즉, 스키마에서는

fetchboards: [MyResult]   # 배열 안에 객체 1개 이상을 의미!

리졸버에서는

fetchBoards: (parent, args, context, info) => {
    ...
}

이렇게 되어 있는데, 둘 중 하나를 다른 쪽에 맞춰서 수정해야 합니다. 예를 들어, 스키마를 fetchBoards: [MyResult]로 수정하거나, 리졸버를 fetchboards: (parent, args, context, info) => {...}로 수정하시면 됩니다.

항상 코드 작성 시, 대소문자 구분에 주의하여 일관된 명명규칙을 따르는 것이 중요합니다.