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 相关文章推荐
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 Javascript
详解Javascript中的Object对象
Feb 28 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
js数据类型检测总结
Aug 05 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 Javascript
vue+canvas实现拼图小游戏
Sep 18 Javascript
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
vue backtop组件的实现完整代码
Apr 07 Vue.js
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
提问的智慧
2006/10/09 PHP
域名查询代码公布
2006/10/09 PHP
使用eAccelerator加密PHP程序
2008/10/03 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python删除过期文件的方法
2015/05/29 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python 发送json数据操作实例分析
2019/10/15 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
计算机专业自荐信
2013/10/14 职场文书
闭幕式主持词
2014/04/02 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书