如何使用新的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
}
}
答案 0 :(得分:8)
您的解析程序应返回类的新实例,如更新的GraphQL文档中所述:http://graphql.org/graphql-js/object-types/。
class People {
friendList () {}
}
var rootValue = {
getPeople: function () {
return new People();
}
}
答案 1 :(得分:4)
我无法找到使用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语言语法编写复杂的代码!