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 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
jQuery与其它库冲突的解决方法
Jun 25 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
javascript中比较字符串是否相等的方法
Jul 23 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
javascript实现标签切换代码示例
May 22 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
毕业生实习鉴定
2013/12/11 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
高中历史教学反思
2014/02/08 职场文书
英语国培研修感言
2014/02/13 职场文书
行政助理的岗位职责
2014/02/18 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
英文慰问信
2015/02/14 职场文书
文艺演出主持词
2015/07/01 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
vue3中provide && inject的使用
2021/07/01 Vue.js