繁体   English   中英

GraphQL:以某种类型重用root_query的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM