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 ajax post提交数据乱码
Nov 05 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
全面解析Bootstrap手风琴效果
Apr 17 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
May 19 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
Jun 15 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
小程序自定义日历效果
Dec 29 Javascript
vue请求数据的三种方式
Mar 04 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 Javascript
js实现自动锁屏功能
Jun 02 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中调用ASP.NET的WebService的代码
2011/04/22 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue3.0实现插件封装
2020/12/14 Vue.js
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用python分析git log日志示例
2014/02/27 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python中的函数作用域
2018/05/07 Python
python系列 文件操作的代码
2019/10/06 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
先进事迹报告会主持词
2014/04/02 职场文书
期末评语大全
2014/05/04 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
北京故宫导游词
2015/01/31 职场文书
运动会开幕式致辞
2015/07/29 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
python中validators库的使用方法详解
2022/09/23 Python