Почему graphQLErrors всегда пуст в реагирующих компонентах? - PullRequest
3 голосов
/ 13 марта 2019

Я хочу показать некоторые ошибки, которые приходят с сервера graphql пользователю.

Есть какой-то компонент с обратным вызовом, использующий некоторую мутацию

onSave() => {
    this.props.mutate({
        mutation: CHANGE_ORDER_MUTATION,
        variables: {
            ids,
        },
    }).catch((e) => {
        console.log(e.graphQLErrors) <--- e.graphQLErrors is always empty array = []
    })
}

Хотя я могу видеть graphQLErrors ошибка со ссылкой apollo-link-error.

const errorLink = onError(({ graphQLErrors, networkError }) => { console.log(graphQLErrors) <--- errors from server });

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Миграция на apollo-server вместо express-graphql решит проблему.

Или вы можете получить доступ к ошибкам e.networkError.result.errors

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

Насколько я понимаю, 'catch' будет ловить ошибки, если ваш сервер возвращает код ошибки, но не если он возвращает ваши ошибки в ответе, а с кодом успеха. В этом случае вам просто нужно убрать свои ошибки из ответа (сохраняя свою ловушку на случай, если сервер ответит кодом ошибки):

this.props.mutate({
  mutation: CHANGE_ORDER_MUTATION,
    variables: {
      ids,
    },
  })
  .then((response) => {
    if (response.errors) {
      // do something with the errors
    } else {
      // there wasn't an error
    }
  })
  .catch((e) => {
    console.log(e.graphQLErrors) <--- e.graphQLErrors is always empty array = []
  })

В качестве альтернативы - если вы используете опцию graphql() из Reaction-Apollo, вы можете указать обработчик onError:

export default graphql(CHANGE_ORDER_MUTATION, {
  options: (props) => ({
    onCompleted: props.onCompleted,
    onError: props.onError
  }),
})(MyComponent);

ссылки:

...