You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server执行addTask突变报非空字段不可返回null错误

错误根因与修复方案

1. 核心问题:返回值与schema定义不匹配

你在schema中声明addTask突变的返回类型为Task!(非空Task对象),但当前resolver中map操作返回的是整个lists数组(元素为List类型对象),GraphQL解析时无法从数组中匹配到Task类型的name字段,就会触发非空字段返回null的报错。

2. 次要问题:入参与测试数据不匹配

你的测试数据中列表ID为list-0、list-1,但测试突变时传入的listId是task-0,无法匹配到任何列表,自然无法生成新的Task对象。

3. 隐藏问题:未修改原数据数组

你仅用map生成了新数组,没有赋值给原lists变量,后续查询时数据不会更新,修改操作无法持久化。


修正后的resolver代码

addTask(parent, {listId, name}) {
  // 匹配目标列表
  const targetList = lists.find(list => list.id === listId);
  if (!targetList) {
    throw new Error(`ID为${listId}的列表不存在`);
  }
  // 生成新Task对象
  const newTask = {
    name,
    completed: false,
    // 可替换为你自己的ID生成逻辑
    id: "task-" + Date.now()
  };
  // 更新原数组数据
  targetList.tasks.push(newTask);
  // 按schema要求返回Task对象
  return newTask;
}

额外问题解答

不需要提前将tasks和lists分开存储,你当前的嵌套数据结构完全可以满足基础功能需求,等后续数据量变大、关联查询场景增多时再考虑拆分存储即可。测试时记得把突变的listId参数替换为已存在的list-0或list-1即可正常运行。

内容的提问来源于stack exchange,提问作者Zamoule

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:45:03