Как обрабатывать ошибки со стеком Apollo
Я использую стек Apollo с graphql-server-express
и apollo-client
.
Поскольку мой backend не является совершенным, ошибки могут появляться, и поэтому я должен отвечать на запрос с ошибкой для этого пути.
До сих пор моей основной проблемой была аутентификация, и поэтому я ответил с ошибкой.
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 Tools. In не является объектом ошибки в функции catch.
Моя попытка отлично работает с GraphiQL, где я получаю ошибки и данные в одном и том же объекте.
Итак, как я могу выбросить ошибки для свойства без потери всего запроса?
Ответы
Ответ 1
Вы можете вручную искать result.error
в части then
вашего обещания и избегать использования catch
. Также я думаю, что вы могли бы также добавить then
после вызова catch
для обработки этого конкретного случая.
В дополнение к этому вы также можете использовать formatError на вашем сервере GraphQL, чтобы вручную фильтровать и форматировать сообщения об ошибках. Тело этой функции следующее, и у вас есть доступ к брошенному Error
.
formatError: (error) => {
return {
name: error.name,
mensaje: error.message
}
}