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

Vuex Store实现鉴权时axios响应拦截器返回undefined问题求助

问题原因与修复方案

核心问题

你当前遇到的返回undefined问题,根源是axios响应拦截器的错误处理回调返回逻辑错误,其次还有两个可以优化的适配点:


修复步骤

1. 修正响应拦截器的错误返回逻辑

axios拦截器的错误处理分支,只有返回reject状态的Promise,才会把错误继续传递给上层请求的catch分支。你当前直接写return error会被包装成resolve状态的正常返回值,上层请求不会触发catch,自然拿不到错误对象,出现undefined。

修改axios.js的拦截器代码:

api.interceptors.response.use(response => {
  console.log('ok')
  return response;
}, error => {
  // 加兜底判断,避免断网/跨域等场景下error.response不存在报错
  if (error.response?.status === 401) {
    store.dispatch('log_out')
  }
  // 这里必须返回reject状态的Promise才能让上层catch捕获到错误
  return Promise.reject(error)
});

2. 补充axios初始化时的默认头配置

你当前axios.js中只在模块加载时读取了一次localStorage的token,但没有赋值给api实例的默认请求头,页面刷新后已登录的用户请求会丢失授权头。补充代码:

const api = axios.create({ baseURL: 'http://127.0.0.1:8000/' })
// 新增以下代码
if (token) {
  api.defaults.headers.common['Authorization'] = 'Bearer ' + token
}

现象解释

你提到仅在有token时才添加拦截器就运行正常,是因为登录阶段还没有token,拦截器不会被挂载,登录请求的错误会走原生axios的默认reject逻辑,直接传递到上层catch,所以不会出现undefined的问题。全局挂载拦截器后错误返回逻辑错误,才会导致异常。


内容的提问来源于stack exchange,提问作者Maarten Van Hoecke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:00:03