You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nuxt store中捕获axios错误后跳转至错误页面

Nuxt Store中Axios请求错误跳转错误页的最优实现方案

Nuxt框架的Store内部可直接访问全局实例的错误处理/路由能力,不需要额外引入第三方依赖,根据你使用的Nuxt版本选择对应实现即可:

Nuxt2 实现

优先调用Nuxt自带的$nuxt.error()方法,自动加载layouts/error.vue作为错误页,同时保留错误上下文信息,符合框架原生设计规范,比手动跳转路由适配性更强(兼容SSR场景)。
修改后的action代码如下:

export const actions = {
  // 从action上下文解构app实例即可调用全局方法
  getData ({ commit, app }) {
    this.$axios('https://jsonplaceholder.typicode.com/todosx/1')
      .then((response) => {
        commit('SET_DATA', response.data)
      })
      .catch((err) => {
        // 传入错误状态码和提示信息,自动跳转到错误页
        app.$nuxt.error({
          statusCode: err.response?.status || 500,
          message: err.response?.data?.message || '数据请求失败'
        })
        // 若需要跳转到自定义路由的错误页,替换为下方代码即可
        // app.router.push('/custom-error')
      })
  }
}

Nuxt3 实现

Nuxt3优先使用showError方法触发全局错误流程,自动渲染错误页:

// 若使用Pinia作为状态管理,action写法如下
import { defineStore } from 'pinia'

export const useDataStore = defineStore('data', {
  state: () => ({
    data: {}
  }),
  actions: {
    async getData() {
      try {
        const response = await $fetch('https://jsonplaceholder.typicode.com/todosx/1')
        this.data = response
      } catch (err) {
        // 触发原生错误流程,自动渲染错误页
        throw showError({
          statusCode: err.response?.status || 500,
          statusMessage: err.message || '数据请求失败'
        })
        // 若需要跳转到自定义路由的错误页,替换为下方代码即可
        // const router = useRouter()
        // router.push('/custom-error')
      }
    }
  }
})

优化建议

如果项目内有大量类似的请求错误处理逻辑,可以直接在Axios全局响应拦截器中统一处理错误跳转,不需要在每个action的catch块重复编写逻辑,维护成本更低。

内容的提问来源于stack exchange,提问作者cherakkal_a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:51:00