如何在GraphQL中查询并检查字段是否存在?
解决GraphQL查询字段不存在报错的问题
针对你遇到的Field 'qaBlock' doesn't exist on type 'PageRecord'报错,以下是几种可行的解决思路:
1. 针对正确类型编写片段
如果qaBlock并非PageRecord类型的固有字段,而是属于page返回联合类型中的其他子类型(比如专门带问答模块的页面类型),你需要为对应子类型单独编写查询片段:
query MyQuery($slug: String!) { page(filter: {slug: {eq: $slug}}) { ... on PageRecord { title } ... on QaEnabledPageRecord { title qaBlock { items { header content } } } } }
这种写法下,只有当页面属于包含qaBlock的子类型时,查询结果才会返回该字段;否则结果中不会出现qaBlock,你可以在客户端将缺失的字段手动设为null或空数组。
2. 修改Schema(若有权限)
如果qaBlock确实是PageRecord的可选属性,可联系Schema维护者将qaBlock添加为PageRecord的可选字段:
type PageRecord { title: String! qaBlock: QaBlock # 标记为可选,默认允许为null }
修改后,你原来的查询就能正常执行,当页面没有qaBlock时会自动返回null。
3. 客户端兜底处理
如果无法调整Schema或查询结构,可在客户端接收到结果后手动补充字段:
// 示例:JavaScript中处理查询结果 const response = await fetch('/graphql', { method: 'POST', body: JSON.stringify({ query: yourQuery, variables: { slug: yourSlug } }) }); const { data } = await response.json(); if (data.page && !data.page.qaBlock) { data.page.qaBlock = null; // 或根据需求设为 [] }
内容的提问来源于stack exchange,提问作者ST80
相关产品推荐
相关产品推荐

