Невозможно удалить сообщение с Graphql - PullRequest
0 голосов
/ 04 марта 2019

У меня проблема с правильной работой функции распознавателя.

Вот моя функция распознавателя:

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.Это результат неправильного способа запроса мутации или неправильная функция распознавания?

1 Ответ

0 голосов
/ 04 марта 2019

Согласно вашей схеме ваша мутация deleteLink возвращает тип объекта Link, а Link возвращает id, description, url в качестве обязательных полей.

В вашем преобразователе вы возвращаете только id и null для всех остальных.

На мой взгляд, лучшим подходом было бы изменить тип возврата мутации на тип String или ID.Когда вы удаляете запись, вы не можете (не должны) возвращать эту же запись, но должны возвращать сообщение статуса / идентификатора.

Что-то вроде:

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

Надеюсь, это поможет.

...