新 GraphQL buildSchema 的嵌套查询
Posted
技术标签:
【中文标题】新 GraphQL buildSchema 的嵌套查询【英文标题】:Nested query for the new 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
【问题讨论】:
你找到答案了吗?我自己现在正在努力解决这个问题。 【参考方案1】:您的解析器应该返回一个新的类实例,如更新的 GraphQL 文档中所述:http://graphql.org/graphql-js/object-types/。
class People
friendList ()
var rootValue =
getPeople: function ()
return new People();
【讨论】:
问一个简单的问题..如果朋友列表是另一种类型,例如(朋友)朋友列表:朋友。你如何在 person 类中解决这个问题。 @kweku360friendList
表示字段解析器。我鼓励您查看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 语言语法编写复杂的代码!
【讨论】:
以上是关于新 GraphQL buildSchema 的嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL buildSchema 与 GraphQLObjectType
如何使用 apollo 服务器从变量运行 graphql 查询