使用 join-monster 库 (GraphQL) 对根查询字段进行分页

Posted

技术标签:

【中文标题】使用 join-monster 库 (GraphQL) 对根查询字段进行分页【英文标题】:Paginating a Root Query field using join-monster library (GraphQL) 【发布时间】:2017-08-17 20:01:33 【问题描述】:

我正在努力使用以下文档的 join-monster 库实现应用层分页:http://join-monster.readthedocs.io/en/latest/pagination/

所有示例都是关于从特定节点对关系进行分页,但我想对 RootQuery 中的字段进行分页。我的 RootQuery 如下所示:

const RootQuery = new GraphQLObjectType(
  name: "Query",
    articles: 
      type: new GraphQLList(ArticleType),
      args: ,
      resolve(parentValue, args, context, resolveInfo) 
        return joinMonster(
          resolveInfo,
          ,
          sql => 
            return knex.raw(sql).then(result => 
              return result[0];
            );
          ,
           dialect: "mysql" 
        );
      
    
  )
);

我想给文章字段分页,所以我试着把它变成一个连接:

const RootQuery = new GraphQLObjectType(
  name: "Query",
  fields: () => (
    articles: 
      type: ArticleConnection,
      args: gqlUtils.connectionArgs,
      resolve(parentValue, args, context, resolveInfo) 
        return joinMonster(
          resolveInfo,
          ,
          sql => 
            return knex.raw(sql).then(result => 
              return gqlUtils.connectionFromArray(result[0], args);
            );
          ,
           dialect: "mysql" 
        );
      
    
  )
);

但是当对它运行查询时,我得到了错误

函数必须返回/解析每个对象所在的对象数组 结果集中的一行。而是得到了 边...

现在我被困住了。我以错误的方式接近它吗?我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

这几乎是对的,问题是我在将数据发送到joinMonster之前调用了“connectionFromArray”,显然它必须在之后调用:

const RootQuery = new GraphQLObjectType(
  name: "Query",
  fields: () => (
    articles: 
      type: ArticleConnection,
      args: connectionArgs,
      resolve(parentValue, args, context, resolveInfo) 
        return joinMonster(
          resolveInfo,
          ,
          sql => 
            return knex.raw(sql).then(result => 
              return result[0];
            );
          ,
           dialect: "mysql" 
        ).then(data => connectionFromArray(data, args));
      
    
  )
);

【讨论】:

以上是关于使用 join-monster 库 (GraphQL) 对根查询字段进行分页的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq

joinmonster 不是一个函数 - GraphQL

Angular Apollo 将 URI 注入 graphql.module.ts

在 GraphQL 对象查询中使用变量

GraphQL,使用 GraphiQL 的查询语法不正确

转换为数值失败 - GraphQL