Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误

Posted

技术标签:

【中文标题】Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误【英文标题】:Nuxt(Vue) Apollo error handling using $apollo.query 【发布时间】:2020-12-27 09:21:31 【问题描述】:

在我的 nuxt 应用程序中,我尝试手动调用 nuxt apollo (v. 4.0.1) 查询,并处理由此产生的错误。我已经通过查询尝试了外部 try catch 以及错误方法,但是,它似乎没有到达任何一个处理程序。

this.$apollo
        .query(
            query: baseCategoryChildren,
            variables:  id: bCat.sys.id ,
            errorPolicy: 'ignore',
            error(error, vm, key, type, options) 
                 console.log(error)
                 console.log(vm)
                 console.log(key)
                 console.log(type)
                 console.log(options)
             ,
         )

在上面的示例中,没有任何控制台日志是输出的,相反,我得到的只是控制台中默认的 Apollo 错误消息。

app.730eca1.js:2 Uncaught (in promise) Error: Network error: Response not successful: Received status code 429
    at new n (app.730eca1.js:2)
    at app.730eca1.js:2
    at app.730eca1.js:2
    at Set.forEach (<anonymous>)
    at app.730eca1.js:2
    at Map.forEach (<anonymous>)
    at t.broadcastQueries (app.730eca1.js:2)
    at app.730eca1.js:2

我正在尝试检查错误响应中的状态代码以正确处理,但我似乎无法理解代码中的错误。

知道为什么不调用错误方法吗? 提前致谢

【问题讨论】:

【参考方案1】:

您可以在 nuxt.config.js 的 apollo 部分声明一个 errorHandler

export default 
   // ===
   apollo: 
        clientConfigs: 
            default: 
                httpEndpoint: `$process.env.BASE_URL/graphql`
            
        ,
        errorHandler: '~/plugins/errorhandler.apollo.js'
    ,
   // other nuxt config like loading, css, plugins

~/plugins/errorhandler.apollo.js 你可以有类似的东西

export default (graphqlError,  store, error, redirect, route ) => 
    console.log( graphqlError )

    const  networkError, message, gqlError, graphqlErrors  = graphqlError

    // handle error

    return error( statusCode: 503, message: message )


【讨论】:

以上是关于Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ngrok 公开 Nuxt/vue 前端和 laravel 后端本地环境

如何在 Vue(Nuxt) 中使用图像作为 Vue 轮播的导航标签?

为啥 vue-splide 不能与 Nuxt2 一起使用?

如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例?

Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误

使用 vs 代码设置 nuxt/vue 调试的语法错误