반응형

 typeDefs를 정의하고 resolvers 를 정의하고 GraphQLServer( typeDefs,resolvers) 를 적어서 실행시키면 

한 파일에 너무 큰 용량이 들어가서 보기가 힘들다. 이걸 나누면 정말 편할거같다.

typeDefs 파일과 resolvers 파일들을 기능별로 나눌수있다면 얼마나 좋을까?

그렇게하기위해서는

 

우선 graphql-tools와 merge-graphql-schemas 를 설치해야한다.

 

import { makeExecutableSchema } from "graphql-tools";
import { fileLoader, mergeResolvers, mergeTypes } from "merge-graphql-schemas";
import path from "path";

const allTypes = fileLoader(path.join(__dirname,"/api/**/*.graphql"));
//이뜻은 api폴더 밑에 있는 모든 폴더 밑에 있는 모든 .graphql파일을 가져온다.
const allResolvers = fileLoader(path.join(__dirname, "/api/**/*.js"));
//이뜻은 api폴더 밑에 있는 모든 폴더 밑에 있는 모든 .js파일을 가져온다.

const schema = makeExecutableSchema({
  typeDefs: mergeTypes(allTypes),
  resolvers: mergeResolvers(allResolvers),
});

export default schema;

이렇게하면 schema를 통해서 server에는 

import schema from "schema" 를해주고

 

GraphQLServer({schema}) 이렇게만 적으면 끝이다.

이러면 모든 api폴더 안에 생기는 폴더 내부의 graphql은 typeDefs로

js파일은 resolvers 로 역할을 할  수 있다.

 

예를들어 인사에 관한 폴더를 만들고 그 내부에

인사.graphql

인사.js 를 만든다 

인사.graphql에서는

type Query{
	hello:String!
}

 

이라고하고 인사.js에서

export default{
	Query:{
    	hello:()=>"Hi"
    }
}

이렇게 생성한다면 서버를 재시작하면 이런 쿼리들이 만들어질것이다.

반응형

+ Recent posts