개발

graphql 시작하기

덤벨로퍼 2020. 1. 28. 19:37
const express = require('express');
const app = express();

const expressGraphQL = require('express-graphql');
app.use('graphql',expressGraphQL({
     graphiql:true
}))
app.listen(4000,()=>{
    console.log('listening');
})

express-graphql은 express와 graphql 을 이어준다. '/graphql' url 이 뜨면 expressGraphql을 메소드실행해 graphql을 사용한다.

 

 

먼저 스키마를 만들어야한다.

const graphql = require('graphql');
const {GraphQLObjectType} = graphql;

const UserType = new GraphQLObjectType({
    name:'User',
    fields:{
        id:{type:GraphQLString},
        firstName:{type:GraphQLString},
        age:{type:GraphQLInt}
    }
})

 

GrapqhQLObjectType 을 통해 새로운 스키마를 만들수있다.

name, field로 나뉘며 필드 안에서는

필드명과 그 속성으로(타입) 구성된다. 

 

다름은 rootQuery 를 정의한다 rootQuery 는 원하는 데이터를 찾는 방법을 정의한다.

const RootQuery = new GrapqhQLObjectType({
    name:'RootQueryType',
    fields:{
        user:{
            type:UserType,
            args:{id:{type:GraphQLString}},
            resolve(parentValue,args){}
        }
    }
})

user의 id(string type의) 를 넣어주면 UserType을 반환해주는 루트쿼리 이다.

type에는 리턴할 타입을 넣고

args 는 쿼리할때 입력할 필드를 넣어주면된다.

 

마지막에 resolve함수를 통해 해당 user의 데이터를 찾는다.

resolve 함수에서는 어떻게 user를 찾을지 구현하면 된다.

resolve(parentValue,args){
                _.find(Users,{id:args.id}) // 입력한 id 로 찾아줌
            }

 

그리고 해당 RootQuery를 가지고 스키마를 만들어 export 해준후

module.exports = new GraphQLSchema({
    query:RootQuery
})

서버.js 에서 이것을 가져와 schema에담아주면 된다.

const schema = require('./schema/schema');


app.use('/graphql',expressGraphQL({
    schema:schema,
     graphiql:true
}))

완료