如何在 Nuxt 插件中使用错误功能?

Posted

技术标签:

【中文标题】如何在 Nuxt 插件中使用错误功能?【英文标题】:How Can I use error function in Nuxt Plugin? 【发布时间】:2018-12-06 23:09:54 【问题描述】:

我正在使用 Nuxt 和 axios-module。

我试图通过 axios 全局拦截器进行全局错误处理。

如何在 Nuxt 插件中使用错误函数?

// ~/plugins/axios.js

export default function ( $axios, store, redirect, error ) 
 $axios
 .onError(apiError => 
   error(statusCode: '403', message: 'test') // It's not work.
   redirect('http://google.com') // It's work.
  )

重定向有效。但错误不起作用。只显示server error page。

【问题讨论】:

它有效。它显示你是 403 错误的调试页面 @Aldarund 我知道错误函数会重定向到自定义错误页面。在中间件中,错误函数重定向到自定义错误页面。 不明白。你用 403 代码调用错误。你看到的结果是 403 代码的错误页面。你期待什么? @Aldarund 我想通过错误函数重定向错误拦截器上的“自定义”错误页面。 那么你只需要自定义你的错误页面布局/error.vue 【参考方案1】:

现在可以在@nuxtjs/axios Helper ?

export default function ( $axios, error: nuxtError ) 
  $axios.onError(error => 
    nuxtError(
      statusCode: error.response.status,
      message: error.message,
    );
    return Promise.resolve(false);
  )

【讨论】:

【参考方案2】:

您的插件函数应该在调用error 函数后返回一个promise 并解析,因为Nuxt.js 将插件函数视为一个promise。就这样。

export default function ( $axios, error ) 
  return new Promise(resolve => 
    $axios.onError(apiError => 
      error( statusCode: 403, message: 'test' ))
      resolve()
    
  )

【讨论】:

【参考方案3】:

您可以使用 Axios 帮助程序来处理有助于处理拦截的 Nuxt 错误。

export default function ( $axios, store, redirect, error: nuxtError ) 
  $axios.onError(error => 
    nuxtError(
      statusCode: error.response.status,
      message: error.message,
      if(statusCode === 403)
        redirect('http://example.com')
      
    );
    return Promise.resolve(false);
  )

详情请参阅@nuxt/axios helpers,有关详情请参阅extending axios

【讨论】:

【参考方案4】:

我也有同样的问题。

检查我的代码后,我发现当您在 asyncData 方法中仅请求一次数据时,插件中的错误方法有效。但是,如果您多次请求,错误方法可能不起作用。此方法无法停止在 asyncData 方法中返回数据。

所以,我的解决方案是在您构建的 axios 插件中检查响应,并在您使用 promise.all() 请求多个 api 时检查响应。如果不合格,停止返回数据。

【讨论】:

欢迎来到 ***,如果需要理解答案,请添加更多描述和代码,因为它会尽快解决其他人的问题。

以上是关于如何在 Nuxt 插件中使用错误功能?的主要内容,如果未能解决你的问题,请参考以下文章

在插件中访问 Nuxt Router

如何在 Nuxt.js 中使用 CKEditor - 未定义窗口错误

如何在 nuxt.js 中安装 trading-vue-js 插件?

如何在 Nuxt.js 的 axios 插件中访问当前的 fullPath?

如何在nuxt中使用vue插件

nuxt 插件文件夹中的 Javascript - 如何在组件中使用?