GraphQL自省错误求助:输入类型不匹配问题排查解决
问题分析与解决方案
第一个错误:无效/不完整的自省结果
这个错误本质是后端GraphQL服务处理自省查询(前端同步Schema依赖的查询)时,返回了错误而非有效的data字段。最初的问题大概率是AccommodationInput中引用的AccommodationMeta未定义或不符合规范,导致后端Schema无法正常加载,自省查询失败。
第二个错误:参数必须使用Input类型
你定义的AccommodationPictureMeta是普通GraphQL type(用于定义查询返回结构),但在AccommodationInput这类输入类型中,所有嵌套结构必须使用input类型,不能直接引用普通type,这就是报错提示“received: [AccommodationPictureMeta]”的核心原因。
修复步骤
- 将
AccommodationPictureMeta从type改为input类型:
input AccommodationPictureMeta { id: ID! "The Upload picture custom alt value." alt: String! }
- 检查
AccommodationInput中引用的AccommodationMeta和I18nDescription,确保它们也都是input类型(而非普通type)。示例修改:
input AccommodationMeta { # 补充你的字段定义,比如关联图片元数据 pictures: [AccommodationPictureMeta!] } input I18nDescription { # 补充你的国际化字段定义 locale: String! text: String! }
- 确保后端GraphQL服务能正常启动,无Schema语法错误。可通过GraphQL Playground执行自省查询验证:
query IntrospectionQuery { __schema { types { name } } }
- 重新运行前端
download-schema脚本,确认错误消除。
修正后的完整Schema示例
# 先定义所有依赖的input类型 input I18nDescription { locale: String! text: String! } input AccommodationPictureMeta { id: ID! "The Upload picture custom alt value." alt: String! } input AccommodationMeta { pictures: [AccommodationPictureMeta!] } input AccommodationInput { id: ID @globalId(decode: ID) "The name of the Accommodation." name: [I18nDescription!] "The status of the Accommodation." status: String "The Meta of the Accommodation" meta: [AccommodationMeta!] } extend type Mutation @guard @namespace(field: "App\\GraphQL\\Accommodation\\Mutations") { "Create an Accommodation." accommodationCreate(input: AccommodationInput!): AccommodationCreatePayload @field(resolver: "AccommodationCreateMutation") }
内容的提问来源于stack exchange,提问作者Girish
相关产品推荐
相关产品推荐

