如何在我的架构中定义分页参数?

How do I define pagination parameters in my schema?

我正在尝试创建对我的数据进行分页的功能,但我不确定我需要在哪里放置分页变量。

这是我的架构中的内容:

const Query = new GraphQLObjectType({
  name: 'Query',
  description: 'This is a root Query',
  fields: () => {
    return {
      allPosts: {
        type: new GraphQLList(Post),
        args: {
          offset: {
            type: GraphQLInt
          },
          first: {
            type: GraphQLInt
          }
        },
        resolve(root, args) {
          return Db.models.post.findAll({where: args});
        }
      }
    };
  }
});

在我的参数中,我创建了变量 offsetfirst 以便能够使用它们。在我的 graphiQL 界面中,我可以这样做:

{
    allPosts() {
    id
    }
}

并且它正确地检索了我所有的帖子。但是,如果我尝试这样做:

{
    allPosts(offset:10, first: 10) {
    id
    }
}

"message": "Unknown column 'post.offset' in 'where clause'",

在 Sequelize 中,offset 是与 where 不同的选项。 Sequelize 也没有 first 选项,但它确实有 limit。你可以这样做:

resolve(root, { offset, first: limit }) {
  return Db.models.post.findAll({offset, limit});
}

您可以查看文档 here 以查看 findAll 支持的所有选项。

我会非常小心地将 args 直接传递到您的数据库中,但为了清楚起见,我应该说 GraphQL 不会为您进行分页。您可以像现在这样传递 args,但是这里没有关于将它们放在哪里或如何使用它们的正确答案,因为每个人都以自己的方式获取数据。