为什么Axios请求拦截器没触发?请求头没添加进去

玉萱 ☘︎ 阅读 74

我给Axios设置了请求拦截器,想统一加token,但发现请求头里根本没有Authorization字段。我直接在拦截器里打log也看不到输出,这是怎么回事?

代码是这样写的:


axios.interceptors.request.use(config => {
  console.log('进入拦截器')
  config.headers.Authorization = <code>Bearer ${localStorage.token}</code>
  return config
})

我检查了localStorage确实有token,发送请求时控制台也没报错,就是拦截器里的log没打印出来。是不是拦截器没生效啊?

我来解答 赞 17 收藏
二维码
手机扫码查看
2 条解答
建梗 Dev
你是不是在设置拦截器之后又创建了新的axios实例?拦截器只对当前实例生效,最简单的办法是确保你在同一个axios实例上操作。把代码改成这样试试:

const instance = axios.create()
instance.interceptors.request.use(config => {
console.log('进入拦截器')
config.headers.Authorization = Bearer ${localStorage.token}
return config
})
// 用这个instance发请求
instance.get('/your-api')


如果还是不行,检查下项目里有没有其他地方重写了headers或者又套了别的拦截器。
点赞 2
2026-02-17 10:06
端木超霞
你这拦截器写法有问题,顺序错了。Axios的拦截器要放在请求之前注册,否则不会生效。你现在可能是在发请求之后才注册拦截器,或者异步加载了拦截器但请求先执行了。

正确写法是:
const service = axios.create()
service.interceptors.request.use(config => {
console.log('进入拦截器')
config.headers.Authorization = Bearer ${localStorage.token}
return config
})

// 然后用 service 发请求,而不是直接用 axios


而且你直接用 axios.interceptors 会污染全局实例,建议用 axios.create() 创建一个自定义实例专门处理业务请求。数据库层面我们通常都会加统一拦截器来处理 token 刷新、错误重试这些逻辑,不要直接改全局对象。

现在你拦截器没触发,大概率是因为发请求时拦截器还没注册上。比如你可能在组件 mounted 里才注册拦截器,但请求已经发出去了。
点赞 2
2026-02-04 07:02