【问题标题】:GraphQL : Reuse arguments from root_query in a typeGraphQL:在类型中重用来自 root_query 的参数
【发布时间】: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 但他们不在那里。

【问题讨论】:

    标签: javascript node.js graphql


    【解决方案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)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2020-10-15
      • 2019-10-19
      相关资源
      最近更新 更多