执行GraphQL Mutation时GiftcardRestriccionInput参数传递ValidationError问题
解决apolloServer.executeOperation中GiftcardRestriccionInput参数传递的ValidationError问题
你遇到的问题根源很直接:用字符串插值把对象直接嵌入Mutation字符串时,JavaScript会自动将对象转为[object Object]这个字符串值,而GraphQL期望接收的是符合GiftcardRestriccionInput结构的对象,自然触发类型验证错误。
正确的做法是利用GraphQL的变量机制传递复杂输入类型,而不是字符串拼接。这样既符合GraphQL的规范,也能实现你复用GiftcardRestriccionInput数据的需求。
错误写法示例(触发问题的代码)
const giftcardRestriction = { type: 'MIN_AMOUNT', value: 100 }; // 错误:用字符串插值传递对象,会被转为[object Object] const mutation = ` mutation { createGiftcardRestriction(input: ${giftcardRestriction}) { id type value } } `; const result = await apolloServer.executeOperation({ query: mutation });
正确写法示例
const giftcardRestriction = { type: 'MIN_AMOUNT', value: 100 }; // 定义带变量占位符的Mutation,声明变量类型 const mutation = ` mutation CreateGiftcardRestriction($input: GiftcardRestriccionInput!) { createGiftcardRestriction(input: $input) { id type value } } `; // 执行操作时单独传入变量,Apollo会自动解析为正确的输入类型 const result = await apolloServer.executeOperation({ query: mutation, variables: { input: giftcardRestriction } }); // 正常返回创建结果 console.log(result.data.createGiftcardRestriction);
关键要点
- 在Mutation字符串中用
$变量名: 类型!的格式声明变量,感叹号表示该变量为必填项 - 调用
executeOperation时,通过variables字段传入实际的对象数据,无需手动序列化 - 这种方式既能避免字符串拼接导致的类型错误,也能轻松复用
giftcardRestriction变量到其他Mutation中
内容的提问来源于stack exchange,提问作者Santiago Rueda Ortiz
相关产品推荐
相关产品推荐

