Объект ошибки useQuery возвращает пустой массив для свойства graphQLErrors - PullRequest
1 голос
/ 06 мая 2020

У меня есть приложение MERN, которое использует перехватчики реакции и @apollo/react-hooks для выполнения мутаций и выполнения запросов. Приложение работает так, как задумано, но теперь я пытаюсь работать над кодом обработки ошибок своего приложения. У меня есть этот запрос

export const getStacks = gql`
query {
    stacks{
        title,
        notecards {
            question,
            answer
        },
        id
    }
}
`;

, который я намеренно нарушаю, изменяя его на этот

export const getStacks = gql`
query {
    storks{
        tile,
        notecards {
            question,
            answer
        },
        id
    }
}
`;

Когда я делаю это и пытаюсь получить доступ к stacksError из

const { loading: isGetStacksLoading, error: stacksError, data: stacksData } = useQuery(getStacks);

Я получаю ошибку сервера внутри stacksError, а graphQLErrors

Это означает, когда я консольного журнала stacksError Я вижу это в консоли

Error: Network error: Response not successful: Received status code 400

В моем приложении. js файл, который я использую createHttpLink с ApolloClient и ApolloProvider

Кто-нибудь знает, почему stacksError возвращает ошибку сервера и не имеет graphQLErrors свойство, которое показало бы мне, что мой запрос неверен?

PS

Я добавил apollo-link-error в свое приложение. js и когда оно вызывается, я могу разобрать ошибку object и записать, что находится в опоре graphQLErrors, а также в опоре networkError и в консоли, которые я вижу, соответственно:

[GraphQL error]: Message: Cannot query field "storks" on type "RootQueryType". Did you mean "stacks" or "stack"?, Location: [object Object], Path: undefined

и

[Network Error]: ServerError: Response not successful: Received status code 400

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

О! Я также использую реактивный маршрутизатор для своего приложения, может быть, мне нужно передать что-то или вроде "подключить" мой компонент, как вы, с помощью redux? idk

1 Ответ

0 голосов
/ 06 мая 2020

graphQLErrors заполняется только тогда, когда сервер возвращает код состояния 200, но ответ включает массив errors - эти errors затем отображаются как graphQLErrors в объекте error, возвращенном ловушкой ( и в другом месте, например, ErrorLink).

Если при выполнении запроса к серверу произошла ошибка, вместо этого она обрабатывается как networkError. Серверы GraphQL обычно отвечают на неправильно сформированные или недопустимые запросы со статусом 400 - это означает, что эти ошибки будут обрабатываться как networkError вместо graphQLErrors.

...