GraphQL传递对象数组作为变量时出错,如何修复?
修复GraphQL Mutation传递对象数组变量的类型错误
问题原因
错误信息直接点明了两个核心问题:
- 后端定义的
ArrInput输入类型不存在val2这个嵌套对象字段 - 后端要求必须传递
val2_id字段且不能为空,说明后端期望直接传关联ID,而非嵌套对象 - 你的代码遗漏了mutation中声明的必填变量
$id,这也会导致执行错误
修复步骤
1. 调整数组格式适配后端输入类型
把数组中每个对象的val2.id提取出来,转换成后端要求的val2_id字段:
result.data.forEach(d => { // 转换arr的结构,匹配ArrInput类型要求 const transformedArr = d.arr.map(item => ({ val1: item.val1, val2_id: item.val2.id // 直接传递ID值,替代嵌套的val2对象 })); const variables = { id: d.id, // 补上mutation要求的必填ID变量(根据实际业务来源调整) label: d.label, arr: transformedArr }; axiosFunc({ query, variables }) .then(response => console.log('创建成功:', response.data)) .catch(err => console.error('请求失败:', err)); });
2. 确认后端ArrInput定义(建议操作)
如果对后端输入类型存疑,可以通过GraphQL Playground或自省查询确认ArrInput的结构,正确的定义应该类似:
input ArrInput { val1: String! val2_id: ID! # 必填的关联ID字段 }
3. 补充必填的$id变量
你的mutation中明确声明$id: ID!是必填参数,之前的代码未传递该变量,必须补上对应的值(比如从循环项d或其他业务逻辑中获取)。
关键说明
错误提示里的val2_id (Expected value to not be null)是核心线索:后端需要的是一个名为val2_id的ID类型字段,而非你当前传递的嵌套val2对象。只要把数据结构转换成后端期望的格式,同时补上遗漏的必填变量,就能解决这个错误。
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

