GraphQL:在类型中重用来自 root_query 的参数
Posted
技术标签:
【中文标题】GraphQL:在类型中重用来自 root_query 的参数【英文标题】:GraphQL : Reuse arguments from root_query in a type 【发布时间】:2018-04-15 06:19:53 【问题描述】:我正在尝试在 GraphQL 中包装一个 REST API,我遇到了这个问题。想象一下我有以下类型:
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。
有没有办法让我保留在我的 RootQuery 中传递的参数并在我的类型中重用它们?我调查了 parentValue 但他们不在那里。
【问题讨论】:
【参考方案1】:传递给解析器的第一个参数 (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)
【讨论】:
以上是关于GraphQL:在类型中重用来自 root_query 的参数的主要内容,如果未能解决你的问题,请参考以下文章