我的解析器功能无法正常工作。
这是我的解析器功能:
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。这是因为查询突变的方法错误还是由于解析器功能不正确?
答案 0 :(得分:1)
根据您的架构,您的deleteLink
突变将返回Link
对象类型,而Link
返回id, description, url
作为必填字段。
在您的解析器中,您仅返回id
,其余所有返回null。
我认为最好的方法是将您的突变返回类型更改为String
或ID
类型。删除记录时,您不能(不应)返回相同的记录,而应返回状态/ ID消息。
类似的东西:
type Mutation {
post(url: String!, description: String!): Link!
deleteLink(id: ID!): String! // Or ID! if you want to return the input id
}
希望有帮助。