[英]GraphQL : Reuse arguments from root_query in a type
我试图将REST API包装在GraphQL中,并且碰到了这一点。 想象一下我有以下类型:
const CbookType = new GraphQLObjectType({
name: 'CbookType',
fields: () => ({
id: { type: GraphQLID },
title: { type: GraphQLString },
user: {
type: UserType,
args: {
userToken: { type: new GraphQLNonNull(GraphQLString) },
userId: { type: new GraphQLNonNull(GraphQLString) }
},
resolve(parentValue, { userToken, userId }) {
return UserController.user({ targetUserId: parentValue.user_id, userToken, userId });
}
}
});
用户字段位于另一个REST端点上,因此我必须再次传递令牌和user_id,这将创建难看的查询,在其中我必须为令牌和user_id永久添加args。
有没有办法让args在RootQuery中传递并在我的类型中重用它们? 我已经调查了parentValue,但它们不存在。
传递给解析器的第一个参数(parentValue)只是字段的“父”解析为的参数-它不会包含有关请求本身或如何解析值的任何信息。
因为GraphQL在继续进行之前解析了请求的每个“级别”,所以您可以在更高级别上修改传递给每个解析器的上下文(第三个参数),并且这些更改对于更低级别的所有解析器都是可见的。
例如,获取Foo类型的查询的解析器:
function (obj, { userToken, userId }, ctx = {}) => {
Object.assign(ctx, { userToken, userId })
return getFoo()
}
然后,类型为Foo的字段可能如下所示:
function (obj, { userToken, userId }, ctx = {}) => {
return getBars(ctx.userToken, ctx.userId)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.