Как обрабатывать ошибки со стеком Apollo

Я использую стек Apollo с graphql-server-express и apollo-client.

потому что мой бэкэнд не идеален, могут появиться ошибки, и поэтому я должен ответить на запрос с ошибкой для этого пути.

до сих пор моей главной проблемой была аутентификация, и поэтому я ответил на ошибку.

return new Error(`${data.status}: ${data.statusText} @ ${data.url}`)

в интерфейсе я использую apollo-client для запроса данных.

return apollo
        .query({query: gql`
            query {
                ${query}
            }`,
            forceFetch: forceFetch
        })
        .then(result => { debugger; return result.data })
        .catch(error => { debugger; console.error(error); });

но если одно свойство запроса отвечает с ошибкой, только функция catch будет вызван. Даже данные остальных свойств передаются, я вижу это на вкладке "Сеть" инструментов Chrome Dev. In не является объектом ошибки в функции catch.

моя попытка отлично работает с GraphiQL, где я получаю ошибки и данные в том же объекте.

Итак, как я могу выбросить ошибки для свойства, не теряя весь запрос?

1 ответов


вы можете вручную искать result.error на then часть вашего обещания и избежать использования catch. Также Я думаю вы также можете добавить then после catch вызов для обработки этого конкретного случая.

в дополнение к этому, вы можете также использовать formatError на сервере GraphQL вручную фильтровать и форматировать сообщения об ошибках. Тело этой функции следующее, И у вас есть доступ к thrown Error.

formatError: (error) => {
  return {
    name: error.name,
    mensaje: error.message
  }
}