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与Prototype并存的冲突的解决方法
Aug 29 Javascript
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
JS中的substring和substr函数的区别说明
May 07 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
js字符串操作方法实例分析
May 06 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
jquery中键盘事件小结
Feb 24 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
详解如何用webpack打包一个网站应用项目
Jul 12 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
IStream与TStream之间的相互转换
2008/08/01 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
javascript时区函数介绍
2012/09/14 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
Python生成器以及应用实例解析
2018/02/08 Python
Python iter()函数用法实例分析
2018/03/17 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python循环实现n的全排列功能
2019/09/16 Python
opencv python如何实现图像二值化
2020/02/03 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
三好学生事迹材料
2014/12/24 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js