【问题标题】:Nested query for the new GraphQL buildSchema新 GraphQL buildSchema 的嵌套查询
【发布时间】:2017-01-30 21:03:46
【问题描述】:

如何使用新的 GraphQL Schema 语言为我的 friendList 制作解析器? friendList 有一个人 _id 数组。

我的新人使用 GraphQL Schema 语言输入:

const schema = buildSchema(`
  type People {
    _id: String
    firstName: String
    lastName: String
    demo: String
    friendList: [People]
  }
  type Query {
    getPeople(_id: String): People
  }
`);

我的老人用 GraphQLObjectType 打字:

const PeopleType = new GraphQLObjectType({
  name: 'People',
  fields: () => ({
    _id: {
      type: GraphQLString,
    },
    firstName: {
      type: GraphQLString,
    },
    lastName: {
      type: GraphQLString,
    },
    friendList: {
      type: new GraphQLList(PeopleType),
      // pass @friends parentValue
      resolve: ({ friends }) {
        return People.find({ _id: { $in: friends } }).then(res => res);
    },
  }),
});

我想实现这个查询:

{
  people(_id: "ABC123") {
    firstName
    lastName
    friendList {
      firstName
      lastName
    }
  }

【问题讨论】:

  • 你找到答案了吗?我自己现在正在努力解决这个问题。

标签: graphql graphql-js


【解决方案1】:

您的解析器应该返回一个新的类实例,如更新的 GraphQL 文档中所述:http://graphql.org/graphql-js/object-types/

class People {
  friendList () {}
}
var rootValue = {
  getPeople: function () {
    return new People();
  }
}

【讨论】:

  • 问一个简单的问题..如果朋友列表是另一种类型,例如(朋友)朋友列表:朋友。你如何在 person 类中解决这个问题。
  • @kweku360 friendList 表示字段解析器。我鼓励您查看contextable.js。它现在可以用作 GraphQL rootValue 解析器。
【解决方案2】:

我找不到使用 graphql-js 的方法,所以我改用 Apollo 的人提供的类似实现,称为 graphql-tools。

http://dev.apollodata.com/tools/graphql-tools/generate-schema.html

他们有一个名为 makeExecutableSchema 的函数,该函数采用以 GraphQL Schema 语言编写的模式并将其与(嵌套的)解析器函数相结合。这解决了问题,如果您的代码使用 GraphQL Schema 语言,集成起来实际上非常简单。

他们还有另一个不可知的工具来公开这个新模式,它取代了 express-graphql,它的 GraphQL 服务器:

http://dev.apollodata.com/tools/graphql-server/index.html

查看文档,希望这能让您灵活地使用 GraphQL Schema 语言语法编写复杂的代码!

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 2020-12-02
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2019-05-30
    • 2021-01-14
    • 2017-06-16
    • 2017-07-17
    相关资源
    最近更新 更多