vue axios封装及API统一管理的方法


Posted in Javascript onApril 18, 2019

在vue项目中,每次和后台交互的时候,经常用到的就是axios请求数据,它是基于promise的http库,可运行在浏览器端和node.js中。当项目越来越大的时候,接口的请求也会越来越多,怎么去管理这些接口?多人合作怎么处理?只有合理的规划,才能方便往后的维护以及修改,

安装

安装axios依赖包

cnpm install axios --save

引入

一般会我会在项目src中新建一个untils目录,其中base用于管理接口域名,http处理请求拦截和响应拦截,user.js负责接口文件(接口文件可以自己新建一个文件夹,然后放对应的接口文件)

vue axios封装及API统一管理的方法

1.在http.js文件中,用于处理axios中对请求拦截和响应拦截做处理,token处理,并引入element-ui加载动画。

import axios from 'axios'
import { Loading, Message } from 'element-ui'
import router from '../router/index.js'
let loading
function startLoading() {
 loading = Loading.service({
  lock: true,
  text: '加载中....',
  background: 'rgba(0, 0, 0, 0.7)'
 })
}
function endLoading() {
 loading.close()
}
// 请求拦截
axios.interceptors.request.use(
 (confing) => {
  startLoading()
  //设置请求头
  if (localStorage.eToken) {
   confing.headers.Authorization = localStorage.eToken
  }
  return confing
 },
 (error) => {
  return Promise.reject(error)
 }
)
//响应拦截
axios.interceptors.response.use(
 (response) => {
  endLoading()
  return response
 },
 (error) => {
  Message.error(error.response.data)
  endLoading()
  // 获取状态码
  const { status } = error.response
  if (status === 401) {
   Message.error('请重新登录')
    //清楚token
   localStorage.removeItem('eToken')
    //跳转到登录页面
   router.push('/login')
  }
  return Promise.reject(error)
 }
)
export default axios

通过创建一个axios实例然后export default方法导出,这样使用起来更灵活一些。

2.在base.js文件中,用于管理我们请求接口的域名,极大的方便后期的维护和开发,如果以后更改域名地址或者增加域名,只需要修改这样就可以了、

//域名统一管理

const base = {
 url: 'http://localhost:5001/api'
}
export default base

3.接口统一管理,每一个js文件都对应一个功能请求接口管理,在下面实现get,post的实例请求,并且引入qs序列化的处理,使用之前先安装qs

安装qs

cnpm install qs --save

3.1:更加模块化管理

3.2:更方便多人开发,有效减少解决命名冲突

3.3:处理接口域名有多个情况

import axios from '../untils/http'
import QS from 'qs'
import base from './base'
/**
 * post方法,对应post请求
 * @desc注册请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function userRejister(data) {
 return axios({
  url: `${base.url}/users/register`,
  method: 'post',
  data: QS.stringify(data)
 })
}
/**
 * get方法,对应get请求
 * @desc登录请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function userInfo() {
 return axios({
  url: `${base.url}/profile/all`,
  method: 'get'
 })
}

4.使用。以上工作做完之后,只需要在我们需要发送请求接口的文件,引入

本实例中引入案例

import { userRejister} from "../../untils/user.js";

发送请求axios请求

async submitForm(formName) {
  this.$refs[formName].validate(valid => {
  if (valid) {
   //发送请求return new Promise((resolve, reject) => {
   userRejister(this.registerUser)
    .then(response => {
    console.log(response);
    resolve();
    })
    .catch(error => {
    reject(error);
    });
   });
  } else {
   console.log("error submit!!");
   return false;
  }
  });
 },

总结

以上所述是小编给大家介绍的vue axios封装及API统一管理的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
jquery js 获取时间差、时间格式具体代码
Jun 05 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
js点击任意区域弹出层消失实现代码
Dec 27 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
JS检测window.open打开的窗口是否关闭
Jun 25 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 Javascript
Vue组件系列开发之模态框
Apr 18 #Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 #Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 #Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 #Javascript
vue.js高德地图实现热点图代码实例
Apr 18 #Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
Apr 18 #Javascript
Vue的H5页面唤起支付宝支付功能
Apr 18 #Javascript
You might like
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
php身份证号码检查类实例
2015/06/18 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
微信JS接口大全
2016/08/25 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
Swiper自定义分页器使用详解
2017/12/28 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
基于python实现聊天室程序
2018/07/27 Python
python字典的常用方法总结
2019/07/31 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
基于python3生成标签云代码解析
2020/02/18 Python
详解Python设计模式之策略模式
2020/06/15 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
初中校园广播稿
2014/02/02 职场文书
银行类自荐信
2014/02/04 职场文书
供用电专业求职信
2014/07/07 职场文书
初婚初育证明范本
2014/11/24 职场文书
保外就医申请书范文
2015/08/06 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python