Vue项目中axios请求的时候使用localStorage去拼接报的401错误

在我上一篇博客所说的项目中的userinfo组件中,当在请求的时候会发生401错误,我们只要添加上请求头即可。

 Headers : {
          'Authorization': 'Bearer ' + localStorage.getItem("token"),
        },

在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何接收和处理Axios请求返回的数据。首先,我得回忆一下Axios的基本用法和响应结构。根据用户提供的引用内容,尤其是引用[2]提到Axios的响应结构包括data、status、statusText、headers和config。所以,我应该先从响应对象的结构讲起。 用户可能已经知道如何发送请求,但不太清楚如何提数据。因此,我需要详细说明如何通过.then()或async/await来获响应对象,并访问其中的data属性。比如,使用.then(response => { console.log(response.data) })或者async函数中的const res = await axios.get(...); console.log(res.data)。 然后,用户可能遇到不同HTTP方法(如GET、POST)的参数传递问题。根据引用[3],GET方法通常使用ctx.query接收参数,而POST使用ctx.request.body。在Axios中,GET请求参数可以通过params配置项传递,POST数据则放在data属性里。这部分需要明确说明,避免混淆。 错误处理也是关键。用户需要知道如何处理网络错误或后端返回的错误状态码。可以介绍使用.catch()来捕获错误,或者检查response.status进行自定义处理。比如,在响应拦截器中统一检查状态码,如引用[1]提到的统一处理错误信息。 另外,引用[1]提到统一处理响应数据,这可能涉及到使用拦截器(interceptors)。我应该建议用户在axios实例中添加响应拦截器,对res.data进行统一处理,比如提特定字段或处理错误码。 还要考虑不同的场景,比如文件上传或需要路径参数的接口(如/api/file/:fid),这时需要接URL,如引用[3]中的例子。这里要提醒用户注意路径参数的替换和传递方式。 最后,生成相关问题时要覆盖用户可能进一步想知道的内容,比如错误处理的具体方法、不同HTTP方法传参的区别、拦截器的使用,以及如何接收二进制数据等。这些问题能够帮助用户深入理解相关知识点。 现在需要确保回答结构清晰,分步骤说明,并引用提供的资料来增强可靠性。同时,注意使用正确的中文表达和LaTeX格式(虽然这个问题中可能用不上数学公式,但需检查是否有其他需要格式化的地方)。避免使用Markdown,保持口语化,但按照用户的要求,回答需要是正式的中文,结构清晰。</think>### 如何接收和处理 Axios 请求的响应数据? #### 1. **Axios 响应结构** Axios 的响应对象包含以下核心字段[^2]: - `data`:服务器返回的主体数据(自动解析为 JSON 或字符串) - `status`:HTTP 响应状态码(如 200、404) - `statusText`:HTTP 状态描述(如 "OK"、"Not Found") - `headers`:响应头信息 - `config`:请求的配置信息 示例代码: ```javascript axios.get('/api/user') .then(response => { console.log(response.data); // 核心数据 console.log(response.status); // 状态码 }) .catch(error => { console.error(error); // 网络或响应错误 }); ``` --- #### 2. **接收数据的关键方法** **(1) 使用 `.then()` 链式调用** ```javascript axios.post('/api/login', { username: 'test', password: '123' }) .then(res => { const token = res.data.token; // 提服务端返回的 token localStorage.setItem('token', token); }); ``` **(2) 使用 `async/await` 语法** ```javascript async function fetchData() { try { const res = await axios.get('/api/file/123'); // 路径参数示例[^3] const fileInfo = res.data; // 接收文件信息 } catch (err) { console.error('请求失败:', err.response?.data); } } ``` --- #### 3. **参数传递与接收** | 请求类型 | Axios 配置项 | 服务端接收方式 | |----------|--------------|---------------------------| | GET | `params` | `ctx.query` (URL 查询参数)| | POST | `data` | `ctx.request.body` | 示例: ```javascript // GET 请求带查询参数 axios.get('/api/search', { params: { keyword: 'vue' } }); // POST 请求传 JSON axios.post('/api/upload', { file: fileData, type: 'image' }); ``` --- #### 4. **统一响应处理(进阶)** 通过 **拦截器** 可全局处理响应[^1]: ```javascript // 响应拦截器 axios.interceptors.response.use( res => { if (res.status === 200) { return res.data; // 直接返回核心数据 } else { return Promise.reject(res.statusText); } }, err => { // 统一处理网络错误 alert(`请求异常: ${err.message}`); return Promise.reject(err); } ); ``` 处理后可直接用 `res` 获 `data`: ```javascript axios.get('/api/data').then(res => console.log(res)); ``` --- #### 5. **特殊数据类型处理** - **二进制数据**:需设置 `responseType: 'blob'` ```javascript axios.get('/api/download', { responseType: 'blob' }) .then(res => { const url = URL.createObjectURL(res.data); // 创建下载链接 }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值