02 . 处理axios的三个问题 :设置基路径/axios挂载到vue原型/请求时自动携带token...

本文介绍如何在Vue项目中配置Axios库,包括设置基路径、将Axios挂载到Vue原型上以及如何自动携带Token进行身份验证。通过使用axios.interceptors.request,每次请求都会自动从localStorage中获取Token并添加到请求头中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1  //使用API时必须在请求头中使用 Authorization 字段提供 token 令牌
 2 import axios from 'axios'
 3 // 处理axios的三个问题
 4 // 处理一:基路径
 5 axios.defaults.baseURL = 'http://localhost:8888/api/private/v1/'
 6 // 处理二 : 把axios 挂载到 vue 的原型上 ,就不用每次都引入啦
 7 Vue.prototype.$axios = axios
 8 // 处理三: 自动携带token
 9 // axios.defaults.headers.common['Authorization'] = localStorage.getItem('token')
10 axios.interceptors.request.use(
11   function (config) {
12     // 拦截每次请求,携带token
13     config.headers.Authorization = localStorage.getItem('token')
14 
15     return config
16   },
17   function (error) {
18     // Do something with request error
19     return Promise.reject(error)
20   }
21 )

 

转载于:https://www.cnblogs.com/sikongdada/p/10688815.html

<think>好的,用户的问题是关于在Vue项目中修改了axios的baseURL之后,静态资源的请求地址没有更新,需要解决方案。首先,我需要理解这个问题发生的原因。 根据用户提供的引用内容,比如引用[2]中提到的在请求拦截器中动态修改config.url,可能用户是在拦截器里设置了BASE_API + config.url,但静态资源的路径可能没有使用这个BASE_API变量。因此,静态资源的请求可能还是原来的路径。 然后,用户可能没有正确配置Vue的publicPath,或者静态资源的引用方式不正确。比如,如果静态资源是使用绝对路径而不是相对路径,那么它们可能不会根据baseURL自动更新。需要检查静态资源的引用方式,比如在img标签的src属性是否使用了绝对路径,或者是在CSS中引用的资源路径是否正确。 另外,可能需要考虑Vue的配置文件,比如vue.config.js中的publicPath设置。如果publicPath没有正确设置,即使修改了axios的baseURL,静态资源路径也不会改变。需要确保publicPath和axios的baseURL保持一致,或者根据环境变量动态设置。 还有可能用户在修改baseURL后没有重新构建项目,导致静态资源的路径仍然是旧的。不过,通常在开发模式下,修改配置后应该会自动重新加载,但在生产环境中可能需要重新构建。 此外,引用[3]中提到了在GET请求中添加间戳参数来避免缓存,可能静态资源的请求被缓存了,导致路径没有更新。可以尝试清除缓存或者在资源URL中添加间戳参数,但这种方法可能不适用于所有情况,尤其是静态资源。 需要综合这些可能性,给出具体的解决步骤。比如,检查axios的baseURL配置是否正确,确保静态资源使用相对路径,检查Vue的publicPath设置处理可能的缓存问题,以及使用环境变量来动态配置路径。同,用户提供的代码示例中,在拦截器里修改了config.url,可能需要确认BASE_API变量是否在修改后正确更新,或者是否有其他地方覆盖了这个配置。 最后,总结解决方案,分步骤说明如何正确配置axios和静态资源路径,确保两者都使用动态的baseURL,避免缓存问题,并验证配置是否生效。</think>### 问题分析 当在Vue项目中修改`axios`的`baseURL`后,静态资源请求地址未更新,通常是因为: 1. **静态资源路径未动态绑定**:静态资源(如图片、CSS文件)可能直接使用了硬编码路径,未关联到动态配置的`BASE_API`或`publicPath`。 2. **缓存问题**:浏览器可能缓存了旧路径的静态资源,导致请求未更新[^2][^3]。 3. **配置未全局生效**:`axios`的`baseURL`可能未在全局拦截器中正确设置,或与Vue的`publicPath`配置冲突[^1][^5]。 --- ### 解决方案 #### 1. 统一动态配置路径 - **步骤1**:在Vue项目根目录创建环境变量文件(如`.env`),定义动态基础路径: ```env VUE_APP_BASE_URL = /api/ ``` - **步骤2**:在`vue.config.js`中配置`publicPath`,使其关联环境变量: ```javascript module.exports = { publicPath: process.env.VUE_APP_BASE_URL, // 其他配置... } ``` 这会将静态资源路径统一为`/api/static/img/xxx.png`格式[^5]。 #### 2. 确保axios拦截器正确配置 - **在axios请求拦截器中动态拼接路径**,引用[2]中的代码已实现此逻辑: ```javascript // 拦截器示例 service.interceptors.request.use(config => { config.url = BASE_API + config.url; // 动态添加基础路径[^2] return config; }); ``` 需确认`BASE_API`的值与环境变量`VUE_APP_BASE_URL`一致。 #### 3. 静态资源引用方式优化 - **避免硬编码绝对路径**,改用相对路径或动态绑定: ```vue <!-- 错误方式 --> <img src="/static/logo.png"> <!-- 正确方式 --> <img :src="`${publicPath}static/logo.png`"> ``` 在Vue组件中通过计算属性获取`publicPath`: ```javascript computed: { publicPath() { return process.env.BASE_URL; // 直接读取环境变量 } } ``` #### 4. 处理缓存问题 - **在静态资源URL中添加间戳**,强制刷新缓存: ```javascript // 引用[3]的封装方法示例 get(url, param) { param = { ...param, _t: new Date().getTime() }; // 添加间戳参数 return axios.get(url, { params: param }); } ``` 或在HTML中手动添加: ```html <link rel="stylesheet" href="/css/style.css?v=20231001"> ``` #### 5. 验证配置生效 - 使用浏览器开发者工具检查: 1. **Network面板**:确认静态资源请求路径是否包含新`baseURL`。 2. **Console输出**:打印`process.env.BASE_URL`和`axios.defaults.baseURL`,确保两者一致。 --- ### 完整配置示例 ```javascript // src/utils/request.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_URL // 与环境变量同步[^5] }); service.interceptors.request.use(config => { if (localStorage.getItem('token')) { config.headers['x-auth-token'] = localStorage.getItem('token'); // 引用[2]的token逻辑 } return config; }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值