gpt4 book ai didi

express - Graphql查询仅不是空对象

转载 作者:行者123 更新时间:2023-12-03 17:18:23 25 4
gpt4 key购买 nike

我试图执行这样的查询:

{
people{
pet{
name
}
}
}

结果:
{
"people": {
"pet": null
}
},
{
"people": {
"pet": {
name: "steve"
}
}
}

我想要的是只让包含宠物的人,有什么办法可以做到这一点,而不是在我的解析器上编码?

最佳答案

用您的描述是不可能的。 GraphQL将调用resolve函数来获取数据。如果您不想在响应中添加某些数据,则必须将其过滤到服务器上的某个位置。您唯一可以控制的是查询,架构和解析函数。

没有办法在查询中仅表达您的需求。如果将其放在架构中,则将不再能够查询没有宠物的人。因此,唯一的方法是在您的resolve函数中编写它。例如,您可以在您的人员字段中添加一个名为hasPet的 bool 参数,然后在解析器中执行此操作:

people(root, { hasPet }){
// get allPeople
if (typeof hasPet === 'undefined'){
return allPeople
}
return allPeople.filter((person) => person.hasPet() === hasPet)
}

不幸的是,这将需要您“向前看”并首先确定一个人是否有宠物,但是如果您使用诸如DataLoader之类的东西来缓存后端或数据库请求,则实际上并不昂贵,因为还是要去拿宠物。这样,您就可以更早地获取它。

如果要从数据库中提取人员,则已经在此处筛选人员而不是在resolve函数中当然是有道理的。

关于express - Graphql查询仅不是空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com