详解vue中axios的使用与封装
Vue.js是一个流行的前端JavaScript框架,用于构建用户界面和单页应用程序(SPA)。Axios是一个基于Promise的HTTP客户端,用于浏览器和node.js中发送异步HTTP请求。在Vue.js项目中,Axios常用于与后端进行数据交互。本文主要介绍如何在Vue项目中使用Axios,并展示如何进行封装以简化HTTP请求。 Axios的安装非常简单。可以通过npm命令来安装。在命令行中输入以下命令即可: ```bash npm install axios --save ``` 接下来,创建一个专门的文件夹和服务文件。通常,会在项目的src目录下新建一个名为service的文件夹,并在其中创建一个index.js文件来存放封装好的Axios服务。 ```javascript // service/index.js import axios from 'axios'; import { Toast } from 'mint-ui'; // 使用mint-ui框架进行提示信息的展示,实际使用中可替换为其他UI框架或方式。 import router from '../router'; // 引入Vue Router以便进行页面跳转。 // 设置默认的请求超时时间和基础URL。 axios.defaults.timeout = 50000; axios.defaults.baseURL = ''; // 设置请求拦截器,用于统一处理请求前的配置,如添加token等。 axios.interceptors.request.use(config => { // 获取本地存储中的token值。 const token = localStorage.getItem('cc_token'); // 如果headers中没有'Content-Type',设置默认为'application/json'。 if (!config.headers['Content-Type']) { config.headers = { 'Content-Type': 'application/json', }; } // 如果存在token,将其添加到请求头中。 if (token) { config.headers.token = token; } // 根据请求类型对参数进行处理。 if (config.method === 'get') { // 对get请求中的params进行一些处理。 config.params = config.params || {}; let json = JSON.parse(JSON.stringify(config.params)); // ...处理json } else { // 对非get请求中的data进行一些处理。 config.data = config.data || {}; // ...处理config.data } return config; }, err => { return Promise.reject(err); }); // 设置响应拦截器,用于统一处理请求返回结果。 axios.interceptors.response.use(response => { // 对返回的状态码进行判断。 if (response.data.code === 501) { // 如果返回501状态码,说明需要进行登录验证。 // 跳转到登录页面,并记录当前页面的跳转路径。 router.push({ name: 'login', query: { retUrl: window.location.href.split('#')[1] || '', is_new_user_url: 1, }, }); } return response; }, error => { return Promise.reject(error); }); ``` 在封装了请求和响应拦截器之后,我们就可以使用Axios来发起GET和POST请求了。以下是一个封装GET请求的示例: ```javascript /** * 封装GET请求方法 * @param {string} url 请求的URL * @param {object} params 请求参数 * @returns {Promise} 返回一个Promise对象 */ export function fetch(url, params = {}) { return new Promise((resolve, reject) => { axios.get(url, { params: params }) .then(response => { // 如果后端返回的状态码为200,表示请求成功。 if (response.data.code === 200) { resolve(response.data.data); // 成功处理,这里可以根据项目需求进行定制。 } else { // 如果请求失败,则显示错误提示。 Toast(response.data.msg); } }) .catch(err => { reject(err); let message = '请求失败!请检查网络'; // 如果存在响应信息,则优先使用响应的错误信息。 if (err.response) { message = err.response.data.message; } Toast(message); }); }); } ``` 同样地,也可以封装POST请求: ```javascript /** * 封装POST请求方法 * @param {string} url 请求的URL * @param {object} data 请求的参数体 * @returns {Promise} 返回一个Promise对象 */ export function post(url, data = {}) { return new Promise((resolve, reject) => { axios.post(url, data) .then(response => { if (response.data.code === 200) { resolve(response.data.data); // 成功处理,这里可以根据项目需求进行定制。 } else { // 处理请求失败的情况。 Toast(response.data.msg); } }) .catch(err => { reject(err); let message = '请求失败!请检查网络'; if (err.response) { message = err.response.data.message; } Toast(message); }); }); } ``` 通过上面的方法,我们已经实现了一个简单的Axios请求封装,可以轻松地在Vue项目中发起HTTP请求。这样的封装使得代码更加清晰,也方便了后续的维护和功能扩展。开发者可以根据自己的需求,在拦截器中加入更多的通用逻辑,如错误处理、日志记录、请求缓存等。
- 粉丝: 3
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Matlab版本2023b的Embedded Coder Support Package for ARM Cortex-M Processors支持包免费分享,1.8G压缩包分成3个(2/3)
- ghostscript-10.0.0
- 医疗保障信息平台定点医药机构接口规范
- Python编程基础入门到高级开发技巧指南
- 手机充电头外观尺寸检测机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- JSP EIMS系统-OA子系统的设计与开发(源代码+LW).zip
- (JSP)JTBC_CMS_2.0.0.8.zip
- linux java jdk8
- Windows系统上Tomcat的安装与配置详解
- Linux-Shell基础命令语言
- 服装图像数据集,衣服图像数据,包含服装属性
- Matlab版本2023b的Embedded Coder Support Package for ARM Cortex-M Processors支持包免费分享,1.8G压缩包分成3个(3/3)
- glove11111wwee.pdf
- ECharts象形柱图-圣诞愿望清单和山峰高度-4.zip
- ECharts象形柱图-人体含水量-2.zip
- ECharts象形柱图-驯鹿的速度-6.zip