You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL带where过滤的查询返回数据后触发Apollo错误求助

解决Apollo Client报错"Can't find field on object false"的问题

问题背景

以下是用于获取用户筹款项目的GraphQL查询:

export const MY_FUNDRAISERS_QUERY = gql`
  query MY_FUNDRAISERS_QUERY($skip: Int = 0, $first: Int) {
    allFundraisers(
      first: $first
      skip: $skip
      sortBy: dateCreated_ASC
      where: { owner: { id: "63573546187cc1edfb4f7d1c" } }
    ) {
      id
      name
      amount
      description
      goal
      dateCreated
      photo {
        image {
          publicUrlTransformed
        }
      }
    }
  }
`;

该查询在GraphQL Playground中可正常执行且返回数据,但Apollo Client抛出以下错误:

Error: Can't find field 'id' on object false
Can't find field 'name' on object false
...(其余字段类似错误)

其余查询和突变均正常运行,怀疑问题与where过滤条件相关。

可能的原因及解决办法

1. 确认服务器响应结构的正确性

虽然网络请求显示有数据,但需检查响应中allFundraisers的实际值是否为数组类型:

  • 打开浏览器DevTools的Network面板,找到该GraphQL请求,查看Response的JSON结构:
    正确的响应结构应为:
    {
      "data": {
        "allFundraisers": [
          {
            "id": "xxx",
            "name": "xxx",
            // 其他字段内容
          }
        ]
      }
    }
    
    如果后端在无匹配数据时返回allFundraisers: false而非空数组[],就会触发Apollo的解析错误。此时需要后端调整响应逻辑,确保该字段始终返回数组(空数据时返回[])。

2. 验证Apollo Client的缓存类型定义

Apollo Client依赖schema类型解析响应,如果客户端缓存中allFundraisers的类型被错误识别为布尔值,会导致解析失败:

  • 使用Apollo Client DevTools查看Cache标签页,确认allFundraisers的类型为[Fundraiser](Fundraiser对象数组)。
  • 若使用代码生成工具(如GraphQL Codegen)生成类型,重新生成并检查allFundraisers的类型定义是否正确;若手动维护客户端schema,确认字段类型无误。

3. 排查自定义缓存逻辑的干扰

如果为allFundraisers配置了自定义read resolver或特殊缓存策略,可能意外返回false:

  • 暂时移除自定义resolver,或在useQuery中使用fetchPolicy: 'network-only'跳过缓存测试:
    const { data } = useQuery(MY_FUNDRAISERS_QUERY, {
      variables: { skip: 0, first: 10 },
      fetchPolicy: 'network-only'
    });
    

4. 调整where过滤条件的格式(针对特定后端)

部分GraphQL后端(如Prisma)在关联字段过滤时需要显式使用操作符,尝试修改where条件为:

where: { owner: { id: { equals: "63573546187cc1edfb4f7d1c" } } }

虽然Playground能正常执行,但部分后端对隐式匹配和显式匹配的处理存在差异,可尝试验证该方案。

内容的提问来源于stack exchange,提问作者Cjmaret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:01:24