为什么graphQLErrors在React组件中总是为空?

时间:2019-03-13 17:27:14

标签: reactjs react-apollo apollo-client express-graphql

我想显示一些从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 :(得分:0)

据我了解,如果您的服务器返回错误代码,则'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 = []
  })

或者-如果您使用react-apollo中的graphql()选项,则可以指定onError处理程序:

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

参考:

答案 1 :(得分:0)

迁移到apollo-server而不是express-graphql解决了这个问题。

或者您可以通过e.networkError.result.errors

访问错误