GraphQL查询songs报错:[String!]!类型无子字段不可选择子属性
问题根因
报错和你已经配置的createSong返回类型无关,核心问题是Schema里RootQuery下的songs字段返回类型定义错误。
你当前写的songs: [String!]!声明代表该接口返回「非空字符串组成的非空数组」,String是GraphQL标量类型,不存在子字段,你在查询语句里写songs { song_file_name }尝试读取子字段,自然会触发该报错。
而你实际的resolver逻辑中,songs方法返回的是Song类型的对象数组,和你定义的[String!]!类型完全不匹配。
修复步骤
直接修改Schema中RootQuery的songs字段返回类型,将[String!]!替换为[Song!]!,修改后的RootQuery代码如下:
type RootQuery { songs: [Song!]! }
验证说明
修改完成后重启服务,重新执行你的查询语句即可正常返回结果:
query { songs { song_file_name } }
你之前参考的帖子里提到的给createSong追加: Song返回类型,是用来解决mutation查询子字段报错的方案,和这次query触发的报错是两个独立问题,你之前只修正了mutation部分的类型定义,没有修改query层songs字段的类型,所以问题没有解决。
内容的提问来源于stack exchange,提问作者TheNomadicAspie
相关产品推荐
相关产品推荐

