【问题标题】:AppSync GraphQL query with nextToken使用 nextToken 进行 AppSync GraphQL 查询
【发布时间】:2019-10-22 15:41:39
【问题描述】:

我的schema.graphql 文件通过运行amplify push 命令在graphql/queries.js 文件中的查询下方自动生成。

这是自动生成查询的架构文件。

schema.graphql

type User @model {
  id: String!
  uuid: String!
  following: [String]
  follower: [String]
  posts: [Post] @connection(name: "Userposts", sortField: "createdAt")
}

type Post 
  @model
  @auth(
    rules: [
      { allow: owner },
      { allow: groups, groups: ["Admin"] }
    ]
  ) {
  id: ID!
  author: User! @connection(name: "Userposts")
  status: Status!
  draft: Boolean
  content: AWSJSON!
  loved: [String]
  comments: [Comment] @connection(name: "PostComments", sortField: "createdAt")
  createdAt: AWSDateTime
    updatedAt: AWSDateTime
}

enum Status {
  PRIVATE
  PUBLIC
}

这是由 schema graphql 生成的查询。

queries.js

export const getUser = `query GetUser($id: ID!) {
  getUser(id: $id) {
    id
    uuid
    following
    follower
    posts(limit: 10, sortDirection: DESC) {
      items {
        id
        privacy
        draft
        content
        loved
        createdAt
        updatedAt
      }
      nextToken
    }
    notifications {
      items {
        id
        content
        category
        link
        createdAt
      }
      nextToken
    }
  }
}
`;

我将(limit: 10, sortDirection: DESC) 添加到posts 以获取用户的10 个最新帖子,但无法弄清楚如何在第一次查询后传递nextToken 值以获取另外10 个帖子。

如何将nextToken 值传递给帖子,以便获得接下来的 10 个帖子?

【问题讨论】:

  • 你介意分享你的 schema.graphql 吗?
  • 添加了架构!

标签: graphql aws-amplify aws-appsync


【解决方案1】:

不确定您是否仍在研究此问题或您的解决方案最终可能是什么,但我认为以下内容也应该有效:

作为放大代码生成过程的一部分,它应该创建一个名为“graphql”的文件夹,其中将放置 schema.json、subscriptons.graphql、querys.graphql 和 mutation.graphql。在此文件夹中,您可以添加一个自定义文件,称为任何您想要的。我通常称我的 customqueries.graphql。它会拾取这些查询或突变或您在代码生成过程中定义的任何内容。因此,在该文件中,您可以定义一个 GetUserPostsCustom 查询,该查询接受帖子的 nextToken,如下所示:

query GetUserPostsCustom($id: ID!, $nextToken: String) {
  getUser(id: $id) {
    posts(nextToken: $nextToken){
      items{
        id
        title
      }
      nextToken
    }
  }
}

然后当你调用你的api时,如果你调用GetUserPostsCustom,应该有一个选项可以传入nextToken。至少我相信这在为 swift 生成代码时有效。不确定javascript。

【讨论】:

    【解决方案2】:

    假设您使用的是graphqlOperation 辅助方法:

    const newData = await API.graphql(graphqlOperation(listUser, { nextToken }));
    

    在这里,来自上一个请求的nextToken 使用object shorthand notation 作为参数传递。

    【讨论】:

    • 是的,但我使用const data = await API.graphql(graphqlOperation(queries.getUser, {id: username})) 来获取所有用户数据,其中包括带有 nextToken 的期刊。我想知道是否可以使用 nextToken 调用另一个 const data = await API.graphql(graphqlOperation(queries.getUser, {id: username}))
    • @Ohsik 简短的回答是肯定的,您可以使用nextToken 调用更多查询,如果没有更多查询,它将自动为null。如果这不能回答您的问题,请尝试详细说明,我可能会为您提供帮助。
    • 感谢您的评论。我如何用nextToken 调用getUser,因为它只需要id 作为参数(getUser(id: $id))。有超过10个帖子要查询,不应该是null。如果还不清楚,请告诉我。
    • 我想我明白了。如果您使用 AWS Amplify 生成查询,您将拥有一个位于(在 React 中)src/graphql/queries.js 的文件。在其中您会找到getUserlistUsersgetUser(或一般的 get 查询)用于获取 single 实例。 list 用于获取多个。在listUsers 中,您应该看到它需要三个参数:$filter: ModelUserFilterInput$limit: Int$nextToken: String。这就是你要找的。希望这会有所帮助。
    • 是的,你明白了!所以我不能使用getUser 来获取接下来的 10 个帖子。我必须使用listUers。我希望有办法使用getUser :(
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2020-04-17
    • 2015-11-27
    • 2021-09-13
    • 2023-03-30
    • 2020-07-16
    相关资源
    最近更新 更多