ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
    }))

    완료

     

    댓글

Designed by Tistory.