如何返回 GraphQL 查询中的所有行?

问题描述 投票:0回答:1

使用: NodeJS、Express、PostgreSQL、GraphQL

我可以获得一行的结果:

    oneTopic: {
  type: TopicsType,
  args: {
    id: { type: GraphQLUUID },
  },
  resolve(parentValue, args) {
    const query = 'SELECT * FROM topics WHERE id=$1';
    const values = [args.id];

    return db
      .one(query, values)
      .then(res => res)
      .catch(err => err);
  },
}

我无法获得给定表的“所有”结果:

    allTopics: {
  type: TopicsType,
  args: {
  },
  resolve(parentValue, args) {
    const query = 'SELECT * FROM topics';

    return db
      .any(query, args)
      .then(res => res)
      .catch(err => err);
  },
}

我尝试了 pg-promise 的 .any() 但它只返回空值。我是否以错误的方式处理这个问题?当需要构建查询来选择和返回给定表中的所有项目时,我似乎缺少一些东西。

node.js postgresql express graphql
1个回答
0
投票

看起来您正在使用 pg-promise 中的

any
方法,该方法旨在返回行数组,但您似乎遇到了返回空值的问题。问题可能在于你如何处理争论。

allTopics
的解析器中,您没有向查询传递任何参数,但在调用
args
时仍尝试使用
any
。相反,您应该只执行查询而不传递任何参数。以下是调整解析器的方法:

allTopics: {
  type: new GraphQLList(TopicsType),
  resolve(parentValue, args) {
    const query = 'SELECT * FROM topics';

    return db
      .any(query)
      .then(res => res)
      .catch(err => err);
  },
}

确保

TopicsType
是代表 topics 表的单行的 GraphQLObjectType,并使用
new GraphQLList(TopicsType)
指示您要返回此类型的项目列表。

通过这些调整,您的解析器应该按预期返回主题表中的所有行。如果您仍然遇到问题,请仔细检查您的 GraphQL 架构和从数据库返回的数据,以确保所有内容都配置正确。

© www.soinside.com 2019 - 2024. All rights reserved.