【问题标题】:How can i define arguments for nested fields on server side using grapqhl?如何使用 graphql 在服务器端定义嵌套字段的参数?
【发布时间】:2019-01-09 01:34:35
【问题描述】:

如何为嵌套字段定义参数?假设我想查阅我所有的帖子,但对 cme​​ts 进行限制和排序。谢谢您的帮助。

{
  allPosts {
    title,
    comments(limit: 5) {
      content
    }
  }
}

【问题讨论】:

    标签: graphql nestjs typeorm


    【解决方案1】:

    您所指的内容通常被指定为Pagination,并且包含在GraphQL's specification 中。

    有多种可能的方式来构造查询以允许检索特定对象类型的多条记录(在我们的情况下为 cmets)。

    最简单的选择,可以通过将GraphQL的查询字符串定义为您要以复数形式横向的对象类型来实现,这意味着您的查询将如下所示:

    {
      allPosts {
        title,
        comments {
          content
        }
      }
    }
    

    但是通过这种实现,您最终会获取所有数据,而不是简单地检索其中的一部分。显然,这种方法可能有很多缺点,具体取决于要获取的数据量,并且只能在特定情况下使用。

    实现您想要的最简单的方法是将 cmets 请求为“切片”,这意味着您将请求数据集的特定初始部分。

    在这种情况下,您将请求最初的 5 个 cmets。

    {
      allPosts {
        title,
        comments(first: 5) {
          content
        }
      }
    }
    

    但是如果你想对列表的其余部分进行分页呢?

    {
       allPosts {
         title,
         comments(first: 5, offset:5) {
           content
         }
       }
     }
    

    这样做,您可以要求接下来的 5 个 cmets。

    但是在实现分页时推荐使用的方法是基于光标的分页,它会转化为这样的东西:

    {
      allPosts {
        title,
        comments(first: 5) {
          edges {
            node {
             content
            }
            cursor
          }
        }
      }
    }
    

    困难的部分在于实现 resolvers 功能(使用 Apollo 等框架稍微容易一些)。

    【讨论】:

    • 谢谢,你让我很清楚。但我的主要问题是如何在后端实现解析器,使用阿波罗....
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2017-11-22
    • 2021-07-28
    • 2017-04-15
    • 2021-07-13
    • 2016-03-04
    • 2018-10-19
    • 2016-09-17
    相关资源
    最近更新 更多