vue axios封装以及API统一管理
在vue项目中,每次和后台交互的时候,经常用到的就是axios请求数据,它是基于promise的http库,可运行在浏览器端和node.js中。当项目越来越大的时候,接口的请求也会越来越多,怎么去管理这些接口?多人合作怎么处理?只有合理的规划,才能方便往后的维护以及修改,
安装
安装axios依赖包
cnpm install axios --save
引入
一般会我会在项目src中新建一个untils目录,其中base用于管理接口域名,http处理请求拦截和响应拦截,user.js负责接口文件(接口文件可以自己新建一个文件夹,然后放对应的接口文件)

1.在http.js文件中,用于处理axios中对请求拦截和响应拦截做处理,token处理,并引入element-ui加载动画。
import axios from 'axios'
import { Loading, Message } from 'element-ui'
import router from '../router/index.js' let loading function startLoading() {
loading = Loading.service({
lock: true,
text: '加载中....',
background: 'rgba(0, 0, 0, 0.7)'
})
} function endLoading() {
loading.close()
} // 请求拦截
axios.interceptors.request.use(
(confing) => {
startLoading() //设置请求头
if (localStorage.eToken) {
confing.headers.Authorization = localStorage.eToken
} return confing
},
(error) => {
return Promise.reject(error)
}
) //响应拦截 axios.interceptors.response.use(
(response) => {
endLoading()
return response
},
(error) => {
Message.error(error.response.data)
endLoading() // 获取状态码
const { status } = error.response if (status === 401) {
Message.error('请重新登录')
//清楚token
localStorage.removeItem('eToken')
//跳转到登录页面
router.push('/login')
}
return Promise.reject(error)
}
)
export default axios
通过创建一个axios实例然后export default方法导出,这样使用起来更灵活一些。
2.在base.js文件中,用于管理我们请求接口的域名,极大的方便后期的维护和开发,如果以后更改域名地址或者增加域名,只需要修改这样就可以了、
//域名统一管理
const base = {
url: 'http://localhost:5001/api'
}
export default base
3.接口统一管理,每一个js文件都对应一个功能请求接口管理,在下面实现get,post的实例请求,并且引入qs序列化的处理,使用之前先安装qs
安装qs
cnpm install qs --save
3.1:更加模块化管理
3.2:更方便多人开发,有效减少解决命名冲突
3.3:处理接口域名有多个情况
import axios from '../untils/http'
import QS from 'qs'
import base from './base' /**
* post方法,对应post请求
* @desc注册请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function userRejister(data) {
return axios({
url: `${base.url}/users/register`,
method: 'post',
data: QS.stringify(data)
})
}
/**
* get方法,对应get请求
* @desc登录请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function userInfo() {
return axios({
url: `${base.url}/profile/all`,
method: 'get'
})
}
4.使用。以上工作做完之后,只需要在我们需要发送请求接口的文件,引入
本实例中引入案例
import { userRejister} from "../../untils/user.js";
发送请求axios请求
async submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
//发送请求return new Promise((resolve, reject) => {
userRejister(this.registerUser)
.then(response => {
console.log(response);
resolve();
})
.catch(error => {
reject(error);
});
});
} else {
console.log("error submit!!");
return false;
}
});
},
以上都是这篇文章所有的说明,如果喜欢,可以多多关注一下
vue axios封装以及API统一管理的更多相关文章
- vue Axios 封装与配置项
import axios from "axios"; import qs from "qs"; import { Message } from "el ...
- vue axios 封装(二)
封装二: http.js import axios from 'axios' import storeHelper from './localstorageHelper' // 全局设置 const ...
- vue(axios)封装,content-type由application/json转换为application/x-www-form-urlencoded
现在主流的http请求头的content-type有三种(不讨论xml): application/x-www-form-urlencoded 最常见的提交数据方式,与原生form表单数据一致,在c ...
- vue axios封装
前言: 对第三方库进行二次封装和抽离到统一模块,项目面对自己的模块进行开发.如果有一天更换库,只需要修改自己模块中的代码,无需对整个项目进行重构. 将axios网络请求库封装到network文件下的r ...
- Vue axios封装 实现请求响应拦截
封装 axios.js import axios from 'axios' import { baseURL } from '@/config' class HttpRequest { constru ...
- vue axios封装以及登录token过期跳转问题
Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...
- vue axios 封装(三)
封装三: import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '. ...
- vue axios 封装(一)
封装一: 'use strict' import axios from 'axios' import qs from 'qs' import NProgress from 'nprogress' im ...
- API统一管理平台-YApi
前言:开发过程中,会产生很多接口对接操作,这个时候可能需要一个接口管理平台管理已经开发好的接口方便业务对接. 一.概述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员 ...
随机推荐
- Error running Tomcat8: Address localhost:xxxx is already in use
参考自: https://blog.csdn.net/huazhongkejidaxuezpp/article/details/41813683 第一步,命令提示符号,执行命令:netstat -an ...
- jfinal处理完html提交过来的数据,将处理信息返回给html页面。html根据返回值进行相应的处理
1.前台jQuery代码: $.ajax({ url: "/admin/jcsjpz/syxmdy/RemoveSyxm", data: {data: id}, success: ...
- font-smoothing使用后字体看起来会更清晰舒服
CSS3里面加入了一个“-webkit-font-smoothing”属性. 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更清晰舒服. 加上之后就顿时感觉页面小清晰了. 淘宝也在用哦! 它有三 ...
- Oracle异常:Caused by: java.sql.SQLException: ORA-01536: 超出表空间 '登录名' 的空间限额 (JPA保存数据)
原因: Oracle表空间为0,没有分配空间内存. 解决办法在代码框里: 1. 查看用户表空间的限额 select * from user_ts_quotas; max_bytes字段就是了 -1是代 ...
- URL与URI的区别和联系
转自:https://www.cnblogs.com/chengdabelief/p/6635045.html 简单理解是这样的:理解URI和URL的区别,我们引入URN这个概念. URI = Uni ...
- QT中报错collect2:ld returned 1 exit status的可能原因。
参考:https://blog.csdn.net/u014546553/article/details/78781547 1.编译成功的例子在后台执行,有时一闪而过,如果再次build ,则会提示上述 ...
- 源码管理工具Git-windows平台使用Gitblit搭建Git服务器
原文地址:https://blog.csdn.net/smellmine/article/details/52139299 搭建Git服务器,请参照上面链接. 注意: 第十二步:以Windows Se ...
- Release file is expired, Updates for this repository will not be applied.(资源索引文件过期问题)
将Debian下载源同步到本地之后,通过本地资源地址进行apt update操作时提示过期问题: E: Release file for http://localhost/security/dists ...
- 删除sheet
/// <summary> /// 删除sheet /// </summary> /// <param name="fileName">< ...
- Rabbit mq 简单应用
参考:http://rabbitmq.mr-ping.com/AMQP/AMQP_0-9-1_Model_Explained.html 简答模式(exchange不工作) import pika # ...