首页 > 解决方案 > 无法使用 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。这是查询突变的错误方法的结果还是解析器函数错误的结果?

标签: javascriptsyntaxschemagraphqlresolver

解决方案


根据您的架构,您的deleteLink突变返回一个Link对象类型,一个作为必填字段Link返回。id, description, url

在您的解析器中,您只id为其余所有返回 a 和 null 。

我认为最好的方法是将您的突变返回类型更改为StringorID类型。当您删除一条记录时,您不能(不应该)返回相同的记录,但应该返回一条状态/id 消息。

就像是:

type Mutation {
  post(url: String!, description: String!): Link!
  deleteLink(id: ID!): String! // Or ID! if you want to return the input id
}

希望能帮助到你。


推荐阅读