使用: 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() 但它只返回空值。我是否以错误的方式处理这个问题?当需要构建查询来选择和返回给定表中的所有项目时,我似乎缺少一些东西。
看起来您正在使用 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 架构和从数据库返回的数据,以确保所有内容都配置正确。