React上的Apollo客户端-如何获取格式错误的错误消息?

时间:2019-09-24 08:39:48

标签: react-apollo

我在任何地方都找不到有关它的信息...

考虑这个非常简单的情况...

<Mutation mutation={LOGIN_MUTATION}>
            {(login, { data, loading, error }) => {
                if (error) {
                    console.log(error)
                }

我收到类似...的字符串错误消息

Error: GraphQL error: ERROR_INVALID_LOGIN_PROVIDER
at new ApolloError (bundle.umd.js:92)
at MutationData.onMutationCompleted (react-hooks.cjs.js:636)
at react-hooks.cjs.js:559
at tryCallOne (core.js:37)
at core.js:123
at JSTimers.js:289
at _callTimer (JSTimers.js:146)
at _callImmediatesPass (JSTimers.js:194)
at Object.callImmediates (JSTimers.js:458)
at MessageQueue.__callImmediates (MessageQueue.js:366)

我无法根据以这种方式格式化的错误消息采取措施。 ERROR_INVALID_LOGIN_PROVIDER可能是ERROR_INVALID_PASSWORD,例如... 我需要根据错误消息做出决定。但我只收到一个包含graphql错误的字符串,js中的模块以及许多不重要的信息。有什么方法可以接收仅格式化服务器错误的imn格式的错误消息?

1 个答案:

答案 0 :(得分:0)

这应该可行

您示例中的

错误应该是ApolloError,可能是GraphQLErrors或NetworkError

(login, { data, loading, error }) => {
            if (error) {
                if (error.graphQlErrors && error.graphQLErrors.length > 0) {
                    // There are graphQL errors and there may be multiple but its always an array.
                    // You should handle it properly

                     const { message } = error.graphQLErrors[0]
                     console.log(message) // e.g. ERROR_INVALID_LOGIN_PROVIDER

                 } else if (error.networkError) {
                    // There may be a network error
                     const { message } = error.networkError
                     console.log(message) // e.g. NetworkError when attempting to fetch resource.
                 }
        }