resolvers
- resolvers들은 하나의 객체가 됨
- 객체는 우리의 타입 정의와 같은 형태를 가져야 함
- 각 유형의 각 필드는 GraphQL 서버 개발자가 제공하는 resolvers라는 기능에 의해 지원됨
- typeDefs에 정의된 애들이 resolvers의 함수를 거쳐감
const resolvers = {
Query: {
allTweets() {
return tweets;
},
tweet(root, args) {
console.log(args);
return null;
}
}
}
* tweet은 function이 됨 , null 반환
* tweet(root, args) 의 root 자리는 고정, tweet(_, args) 이런식으로도 사용 가능
args가 넘겨 받아야하는 파라미터
// 임시로 사용
let users = [{
id: "1",
firstName: "jisu",
lastName: "lee"
},
];
const typeDefs = gql`
type User {
id: ID!
firstName: String!
lastName: String!
fullName: String!
}
`
const resolvers = {
Query: {
allUsers() {
console.log("all users called!!");
return users;
}
},
User: {
fullName() {
return "hello!";
}
}
}
- data에는 없지만 Graphql이 작동하는 방식에 따라 fullName resolvers 발견해 호출하고 결과를 받음
- 아래와 같이 fullName을 요청하면 fullName의 값으로 "hello!"를 출력함
{
allTweets {
author {
fullName
}
}
}
root argument
const resolvers = {
Query: {
allTweets() {
return tweets;
},
tweet(root, {id}) {
return tweets.find((tweet) => tweet.id === id);
},
allUsers() {
console.log("all users called!!");
return users;
}
},
User: {
fullName(root) {
console.log("fullName called");
console.log(root);
return "hello!";
}
}
}
// Result
all users called!!
fullName called
{ id: '1', firstName: 'jisu', lastName: 'lee' }
fullName called
{ id: '2', firstName: 'abc', lastName: 'kim' }
// resolvers의 User fullName() 수정
User: {
fullName({firstName, lastName}) {
return `${firstName} ${lastName}`;
}
}
- resolver의 첫번째 argument에서는 root query를 찾을 수 있음
+ 어떤 식으로 사용하는지는 알겠으나 이론적인 부분 공부가 필요함
출처 :
https://graphql.org/learn/execution/#root-fields-resolvers
https://www.apollographql.com/docs/apollo-server/data/resolvers/#resolver-arguments
'GraphQL' 카테고리의 다른 글
GraphQL 간단한 서버 만들기 3 (0) | 2023.01.23 |
---|---|
GraphQL 간단한 서버 만들기 1 (1) | 2023.01.19 |
GraphQL 이란? (0) | 2023.01.19 |