GraphQL运行createFriend mutation报错“需为输入类型但得到Friend”求助
GraphQL createFriend mutation报错问题解答
你贴出的SDL(Schema Definition Language)语法没有问题,完全符合GraphQL规范要求。
报错信息: "The type of Mutation.createFriend(input:) must be Input Type but got: Friend."
GraphQL明确规定:所有接口入参的类型必须是Input类型(用input关键字声明),不能使用Object类型(用type关键字声明),该报错就是框架检测到你createFriend的input参数使用了Friend对象类型导致的。
报错的核心原因是你在代码层面关联Schema定义时,错误地将createFriend的input参数类型绑定为了Friend对象类型,而非你声明的FriendInput输入类型,和你写的SDL本身无关。
你可以按照以下方向排查:
- 如果你使用TypeGraphQL等装饰器式框架,检查
createFriend方法的参数装饰器,确认是否错误将input的类型指定为了Friend,修正为FriendInput即可,示例修正后写法:@Mutation(() => Friend) createFriend(@Arg('input', () => FriendInput) input: FriendInput) { // 业务逻辑 } - 如果你使用graphql-js手动构造Schema对象,检查Mutation中
createFriend字段的args配置,确认input的type属性是否错误赋值为Friend,替换为FriendInput即可。 - 如果你使用Apollo Server等直接支持SDL书写的框架,检查是否拆分多份SDL文件时
FriendInput的定义没有被正确合并到最终生效的Schema中,或是Resolver配置中额外覆盖了参数类型,修正引入逻辑即可。
你可以单独使用你贴出的这段完整SDL作为唯一Schema启动服务验证,如果不再触发该报错,即可完全确定是你业务代码中的类型引用错误导致的问题。
内容的提问来源于stack exchange,提问作者Scott Wells
相关产品推荐
相关产品推荐

