我和User之间有关系。这是我查询用户帖子的方式。
const UserType = new GraphQLObjectType({
name: 'User'
fields: () => ({
name: {
type: GraphQLString
},
posts: {
type: new GraphQLList(PostType),
resolve(parent, args , { db }) {
// I want to get here the args.someBooleanArg
return someLogicToGetUserPosts();
}
}
})
});
主要查询是:
const queryType = new GraphQLObjectType({
name: 'RootQuery',
fields: {
users: {
type: new GraphQLList(UserType),
args: {
id: {
type: GraphQLInt
},
someBooleanArg: {
type: GraphQLInt
}
},
resolve: (root, { id, someBooleanArg }, { db }) => {
return someLogicToGetUsers();
}
}
}
});
问题是UserType帖子的resolve函数中的args是空对象,我如何将args从主查询传递给子解析函数?
答案 0 :(得分:6)
解析根查询时,可以使用对象分配将参数附加到返回的用户对象。 然后,在用户类型上,从根值(解析函数的第一个参数)解析参数。
示例:
const queryType = new GraphQLObjectType({
name: 'RootQuery',
fields: {
users: {
type: new GraphQLList(UserType),
args: {
id: {
type: GraphQLInt
},
someBooleanArg: {
type: GraphQLInt
}
},
resolve: (root, { id, someBooleanArg }, { db }) => {
return Promise.resolve(someLogicToGetUsers()).then(v => {
return Object.assign({}, v, {
someBooleanArg
});
});
}
}
}
});
const UserType = new GraphQLObjectType({
name: 'User'
fields: () => ({
name: {
type: GraphQLString
},
posts: {
type: new GraphQLList(PostType),
resolve(parent, args , { db }) {
console.log(parent.someBooleanArg);
return someLogicToGetUserPosts();
}
}
})
});

答案 1 :(得分:0)
您可以使用解析器fouth参数 info
从Apollo文档中接收所需的变量:
GraphQL.js模式中的每个解析器都接受四个位置参数:
fieldName(obj,args,上下文,信息) {结果}
这些参数有 以下含义和常规名称:
obj :包含解析器返回的结果的对象 父字段,或者,对于顶级查询字段, 从服务器配置传递的rootValue。此参数启用 GraphQL查询的嵌套性质。
参数:带有 参数传递到查询的字段中。例如,如果 字段使用author(name:“ Ada”)进行调用,则args对象为:{ “ name”:“ Ada”}。
上下文:这是由所有解析器共享的对象 一个特定的查询,用于包含每个请求的状态, 包括身份验证信息,数据加载器实例和 解决该问题时应考虑的任何其他事项 查询。如果您使用的是Apollo服务器,请阅读有关如何设置 设置文档中的上下文。
信息:此参数只能是 在高级情况下使用,但其中包含有关 查询的执行状态,包括字段名称, 根源领域等等。它仅记录在GraphQL.js中 源代码。
info
似乎是一个非常未经记录的功能,但是我现在使用它没有任何问题(至少在有人决定对其进行更改之前)。
这是诀窍:
const UserType = new GraphQLObjectType({
name: 'User'
fields: () => ({
name: {
type: GraphQLString
},
posts: {
type: new GraphQLList(PostType),
resolve(parent, args , { db }, info) {
// I want to get here the args.someBooleanArg
console.log("BINGO!");
console.log(info.variableValues.someBooleanArg);
return someLogicToGetUserPosts();
}
}
})
});