javascript - 无法使用 Graphql 删除帖子
问题描述
我在让解析器功能正常工作时遇到问题。
这是我的解析器功能:
const resolvers = {
Query: {
info: () => `This is the API of a Hackernews Clone`,
// 2
feed: () => links,
},
// 3
Mutation: {
// 2
post: (parent, args) => {
const link = {
id: `link-${idCount++}`,
description: args.description,
url: args.url,
}
links.push(link)
return link
},
deleteLink: (parent, args) => {
const id = args.id
//delete links[id1]
return id
}
}
}
这是我的架构:
type Query {
info: String!
feed: [Link!]!
}
type Mutation {
post(url: String!, description: String!): Link!
deleteLink(id: ID!): Link
}
type Link {
id: ID!
description: String!
url: String!
}
当我使用这个块来运行我的 deleteLink 解析器时:
mutation {
deleteLink(
id: "link-1"
){
id
}
}
我收到这样的错误:
{
"data": {
"deleteLink": null
},
"errors": [
{
"message": "Cannot return null for non-nullable field Link.id.",
"locations": [
{
"line": 3,
"column": 5
}
],
"path": [
"deleteLink",
"id"
]
}
]
}
请让我知道我做错了什么。我不确定为什么会出现错误:不能为不可为空的字段 Link.id 返回 null。这是查询突变的错误方法的结果还是解析器函数错误的结果?
解决方案
根据您的架构,您的deleteLink
突变返回一个Link
对象类型,一个作为必填字段Link
返回。id, description, url
在您的解析器中,您只id
为其余所有返回 a 和 null 。
我认为最好的方法是将您的突变返回类型更改为String
orID
类型。当您删除一条记录时,您不能(不应该)返回相同的记录,但应该返回一条状态/id 消息。
就像是:
type Mutation {
post(url: String!, description: String!): Link!
deleteLink(id: ID!): String! // Or ID! if you want to return the input id
}
希望能帮助到你。
推荐阅读
- python - 用随机二进制密钥解密二进制序列。我的脚本有什么问题?
- javascript - 当某些选择复选框不存在时如何禁用下拉项
- node.js - 在 package.json devDependencies 和 peerDependencies 中重复相同的依赖项?
- c - 关于使用一段时间来“拥抱”我的代码而不是调用 main() 的另一个问题
- android - Android ACTON_SEND MMS Intent 失败并显示“无法附加。文件不受支持”
- python - python中的os模块中的os.chdir()
- c++ - C++ 通过赋值运算符深拷贝动态数组
- python - Matplotlib fill_between 函数不起作用
- python - 枚举大型 csv 的加载似乎没有被懒惰地评估
- java - 与 Mockito Mock 匹配的宽松字符串