删除突变返回null

时间:2019-05-02 23:46:39

标签: javascript node.js graphql express-graphql

我有一个待办事项清单,在此清单中,我已经成功地设法添加新项目和更新缓存,现在正在致力于添加删除突变。 我的最终目标是从删除突变中返回一个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,但我一直为空。 我怀疑我的解析器功能可能有问题。

链接到github repo

1 个答案:

答案 0 :(得分:2)

您可能不想在这里使用deleteOne方法。在mongooseremovedeleteOnedeleteMany中查看type definitions不会返回已删除的文档。请改用findByIdAndRemove,它将返回已删除的文档;如果找不到,则返回null。