为什么 graphQLErrors 在反应组件中总是空的?
Why graphQLErrors are always empty in react components?
我想向用户显示一些来自 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
link。
const errorLink = onError(({ graphQLErrors, networkError }) => {
console.log(graphQLErrors) <--- errors from server
});
据我了解,如果您的服务器 returns 一个错误代码,'catch' 将捕获错误,但如果它 returns 您的响应错误,则不会捕获错误,但会成功代码。在这种情况下,您只需要从响应中获取错误(也保留您的捕获以防服务器响应错误代码):
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);
参考文献:
迁移到 apollo-server
而不是 express-graphql
解决问题。
或者您可以通过 e.networkError.result.errors
访问错误
我想向用户显示一些来自 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
link。
const errorLink = onError(({ graphQLErrors, networkError }) => {
console.log(graphQLErrors) <--- errors from server
});
据我了解,如果您的服务器 returns 一个错误代码,'catch' 将捕获错误,但如果它 returns 您的响应错误,则不会捕获错误,但会成功代码。在这种情况下,您只需要从响应中获取错误(也保留您的捕获以防服务器响应错误代码):
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);
参考文献:
迁移到 apollo-server
而不是 express-graphql
解决问题。
或者您可以通过 e.networkError.result.errors