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

如何解决Apollo Server中Mutation返回data null问题?

解决你的Apollo Server Mutation返回null问题

嘿,我一眼就瞅出问题所在了——你已经在Schema里正确定义了addBook这个Mutation类型,但完全没在Resolvers对象里为它编写对应的处理函数!Apollo Server找不到Mutation的解析逻辑,就只能默认返回null啦。

问题根源

你的resolvers对象里只有Query字段,缺少了Mutation字段来匹配Schema里定义的addBook操作。这就好比你在菜单上标了“新增书籍”,但后厨根本没人知道怎么做这道菜,自然给不出结果~

修改后的完整代码示例

首先确保你有一个全局的books数组来存储数据(如果还没定义的话),然后给resolvers加上Mutation部分:

// 先定义初始的书籍数据源(如果还没有的话)
let books = [
  { title: "The Great Gatsby", author: "F. Scott Fitzgerald" },
];

const typeDefs = gql`
type Book {
  title: String
  author: String
}
type Mutation {
  addBook(title: String, author: String): Book
}
type Query {
  getBooks: [Book]
}
`;

const resolvers = {
  Query: {
    getBooks: () => books
  },
  // 新增Mutation解析器
  Mutation: {
    addBook: (parent, args) => {
      // 从args里获取传入的title和author
      const newBook = {
        title: args.title,
        author: args.author
      };
      // 把新书籍添加到数据源
      books.push(newBook);
      // 返回新增的书籍对象(这样Playground就能拿到你传入的参数啦)
      return newBook;
    }
  }
};

为什么这样能解决问题?

Mutation的工作机制和Query逻辑相通:

  • Schema里的Mutation类型定义了允许的修改操作(比如这里的addBook)以及它的参数和返回类型
  • Resolvers里的Mutation字段必须和Schema一一对应,每个字段对应一个处理函数:
    • 函数的第二个参数args会自动接收你在Playground里传入的title和author参数
    • 你需要在函数里完成数据修改逻辑(比如添加到数组),然后返回修改后的结果(这里就是新创建的Book对象)

验证效果

现在再执行你写的Mutation:

mutation{
  addBook(
    title: "a sad love story",author:"pavan kalyan"){
    title
    author
  }
}

就能得到预期的结果啦:

{
  "data": {
    "addBook": {
      "title": "a sad love story",
      "author": "pavan kalyan"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:26