删除突变返回 null [重复]
Posted
技术标签:
【中文标题】删除突变返回 null [重复]【英文标题】:delete mutation returns null [duplicate] 【发布时间】:2019-09-21 12:21:11 【问题描述】:我有一个待办事项列表,我已经成功地添加了新项目和更新缓存,现在正在添加一个删除突变。 我的最终目标是从删除突变中返回一个 ID,该 ID 可用于更新客户端的整个待办事项列表。
我尝试将项目的 id 传递给突变,但它返回 null。
架构
type Todo
_id: ID!
todo: String!
type RootMutation
deleteTodo(_id: ID!): Todo
解析器
deleteTodo: async function( _id , req)
return await Todo.deleteOne( _id );
使用以下代码在 http://localhost:3000/graphql 的 graphql 界面中测试了此突变:
mutation
deleteTodo (_id: "example0101010101001010101aasdsadasd")
_id
收到此错误
"errors": [
"message": "Cannot return null for non-nullable field Todo._id.",
"locations": [
"line": 3,
"column": 3
],
"path": [
"deleteTodo",
"_id"
]
],
"data":
"deleteTodo": null
当我将一个项目的 id 传递给突变时,它应该返回这个已删除项目的 id,但我一直为 null。 我怀疑我的解析器功能可能有问题。
链接到githubrepo
【问题讨论】:
看起来您的解析器和功能正在按您的预期工作。似乎您的根突变正在返回一个不再存在的 Todo 对象。您可能希望返回一个布尔值。 【参考方案1】:您可能不想在这里使用deleteOne
方法。查看type definitions 的mongoose
、remove
、deleteOne
和deleteMany
不要返回已删除的文档。请改用findByIdAndRemove
,这将返回已删除的文档,如果未找到则返回null。
【讨论】:
是的。基本上,下面的代码解决了这个问题:const deletedTodo = await Todo.findByIdAndDelete( _id ); return _id: deletedTodo.id,todo: deletedTodo.todo ;
感谢您指出我正确的方向!以上是关于删除突变返回 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章