为嵌套类型定义编写解析器

时间:2019-04-07 19:55:53

标签: graphql graphql-js apollo-server express-graphql graphql-tools

假设我的GraphQL API具有以下类型定义:

const typeDef = `
    type Book {
         title: String
         author: Author
         likes: Int
    }

    type Author {
         id: String
         name: String
         age: Int
         books: [Book]
    }

    type Query{
         books(authorid: String!): Book
    }
`

然后,我需要多少个解析器?我应该只使用一个解析器books处理此查询请求并返回所有书籍和作者信息,还是应该制作许多解析器,例如Query -> booksBook -> authorAuthor -> books?我不确定模块化架构和解析器如何协同工作。

1 个答案:

答案 0 :(得分:0)

无论您使用多少类型(书籍,作者等)或输入内容,都需要提供。

const schema = ` 
    type Mutation {
        mutatePost(postId:Int) :Int
    }
    type Query {
        hello: String
        posts: [String]
        books(authorId: String!): Book
    }
  `

您需要使用与查询中定义的名称相同的名称,在解析器中必须相同

   const resolvers = {
        Query: {
        async hello() {
            return 'Hello';
        },
        async posts() {
            return ['Hello', 'World];
        },
        async books(_, { authorId }) {
            //Return data which you is defined in type Book
            //return Book
        }
        },
        Mutation: {
            async mutatePost(_, {
            postId
            }, context) {
            //return Integer
            }
        },
    }

每个查询和变异仅需要queryResolver和mutationResolver