Vue+axios实现统一接口管理的方法


Posted in Javascript onJuly 23, 2018

通过axios请求接口已经很简单了,但最近在做一个vue项目,想着把axios请求再封装一下,这样api就可以只在一处配置成方法,在使用的时候直接调用这个方法。

但咱们不用每个接口都定义成一个??碌?xios请求方法,既然是想简单点,就尽量只在一处完成简单的配置。

1、配置api接口

将同一模块的接口放在一个文件下,比如我在src的services下定义了一个global.js作为全局服务的配置,在它里面配置的api可以作为这个服务的方法。

比如:

Vue+axios实现统一接口管理的方法

name字段将作为之后被调用的方法名,但这个只是一个单纯的对象,现在我们定义方法将它转为方法。

2、将接口配置的数组对象转化为方法

import axios from "axios";
const withAxios = apiConfig => {
 const serviceMap = {};
 apiConfig.map(({ name, url, method }) => {
 serviceMap[name] = async function(data = {}) {
  let key = "params";
  if (method === "post" || method === "put") {
  key = "data";
  }
  return axios({
  method,
  url: "/api" + url,
  [key]: data
  });
 };
 });
 return serviceMap;
};
export default withAxios;

我们在utils下定义了一个通用的方法withAxios,这个方法的作用是将api配置文件转化为包含方法的一个对象。

3、在api配置文件中使用withAxios

import withAxios from "../utils/withAxios";
const apiConfig = [
 {
 name: "userLogin",
 url: "/login",
 method: "get"
 },
 {
 name: "getUserInfo",
 url: "/login/user",
 method: "get"
 },
 {
 name: "getDeptList",
 url: "/login/department",
 method: "get"
 }
];
export default withAxios(apiConfig);

直接export出包装后的对象即可。

4、在vuex中使用

想在vuex中调用某个api,首先import刚才导出的对象

import GlobalService from "@/services/global";

在action中调用某个接口:

const { data } = await GlobalService.userLogin(payload);

这样就完事了。之后只需要配置-调用这么两步就可以完成接口调用。

5、axios的其他配置

我们可以在utils的withAxios中顺便对axios做一些通用的设置。

比如每次请求头中都自动带上鉴权:

axios.defaults.headers.common["Authorization"] = getCookie("jwt") || "";
// 注意:此处只会在web应用初始化时配置,在登录成功后需重新配置Authorization。

比如使用拦截器对返回对象做统一处理:

axios.interceptors.response.use(response => {
 const { data } = response;
 if (data.status === -2) {
 Vue.prototype.$Message.error(`无效的登录信息或登录已失效,请重新登录`);
 delCookie("jwt");
 router.push({ path: "/login" });
 }
 if (data.status === -1) {
 Vue.prototype.$Message.error(`发生错误[${data.message}]`);
 }
 return response;
});

总结

以上所述是小编给大家介绍的Vue+axios实现统一接口管理的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
JavaScript flash复制库类 Zero Clipboard
Jan 17 Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
js比较和逻辑运算符的介绍
Mar 10 Javascript
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
详解VUE 数组更新
Dec 16 Javascript
js实现课堂随机点名系统
Nov 21 Javascript
基于Cesium绘制抛物弧线
Nov 18 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 #Javascript
js正则表达式校验指定字符串的方法
Jul 23 #Javascript
js中时间格式化的几种方法
Jul 22 #Javascript
详解vue axios二次封装
Jul 22 #Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 #Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 #Javascript
5分钟学会Vue动画效果(小结)
Jul 21 #Javascript
You might like
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
详解python中sort排序使用
2019/03/23 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
解决Django中多条件查询的问题
2019/07/18 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
审计主管岗位职责
2014/01/31 职场文书
村委会换届选举方案
2014/05/03 职场文书
工地安全质量标语
2014/06/07 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
同意转租证明
2015/06/24 职场文书
趣味运动会赞词
2015/07/22 职场文书
婚宴致辞
2015/07/28 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB