개발
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
}))