如何解决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
相关产品推荐
相关产品推荐

