AEM GraphiQL保存GraphQL持久化查询报FieldUndefined错误
问题现象
在AEM的GraphiQL Explorer中编写的查询可正常执行,界面右侧可看到正确返回结果,但点击「Save As(另存为)」保存持久化查询时触发如下报错:
Validation error of type FieldUndefined: Field 'adventureList' in type 'QueryType' is undefined
尝试改用命名查询写法仍无法解决,原使用的查询代码如下:
query getAdventures { adventureList { items { _path adventureTitle adventurePrice adventureTripLength adventurePrimaryImage { ... on ImageRef { _path mimeType width height } } } } }
根本原因
- 运行查询和保存持久化查询两个环节的Schema校验逻辑不一致:运行查询时,系统会自动读取你当前在界面选中的站点/内容片段配置端点上下文,自动映射对应配置下的自定义字段,所以不带前缀的
adventureList能被识别、正常返回结果。 - 保存持久化查询时,系统默认走全局根QueryType做严格Schema校验,不会读取界面上临时选中的端点上下文,全局Schema下不存在直接挂载的
adventureList字段,因此报字段未定义的错误。
解决步骤
- 第一步:确认你当前对接的站点配置对应的GraphQL字段命名空间,AEM中每个站点的内容片段模型生成的GraphQL字段,都会自动加上站点配置名作为前缀,比如WKND示例站点的adventure列表字段前缀为
wknd。 - 第二步:修改查询语句,给列表字段加上对应配置前缀,不要依赖界面自动映射的上下文。以WKND站点为例,修正后的正确查询语法如下:
query getAdventures { # 实际使用时把wknd替换为你自己项目的配置前缀 wkndAdventureList { items { _path adventureTitle adventurePrice adventureTripLength adventurePrimaryImage { ... on ImageRef { _path mimeType width height } } } } }
- 第三步:保存时确认持久化查询的存储路径,选在对应站点配置的持久化查询目录下,不要存到全局无配置关联的目录。修改完成后先点击界面的语法校验按钮确认无报错,再执行保存操作即可。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

