Как обрабатывать ошибки со стеком 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
}
}