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 相关文章推荐
javascript编程起步(第六课)
Feb 27 Javascript
使用jquery mobile做幻灯播放效果实现步骤
Jan 04 Javascript
基于jQuery实现网页进度显示插件
Mar 04 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
react native与webview通信的示例代码
Sep 25 Javascript
vue实现的双向数据绑定操作示例
Dec 04 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
Apr 25 Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 Javascript
Antd的table组件表格的序号自增操作
Oct 27 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP微信分享开发详解
2017/01/14 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
pycharm远程调试openstack的图文教程
2017/11/21 Python
python自动化报告的输出用例详解
2018/05/30 Python
Flask-Mail用法实例分析
2018/07/21 Python
django修改models重建数据库的操作
2020/03/31 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
英语系本科生求职信范文
2013/12/18 职场文书
高二学生评语大全
2014/04/25 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
部队2015年终工作总结
2015/04/02 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
施工安全协议书
2016/03/22 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
python可视化之颜色映射详解
2021/09/15 Python
python获取带有返回值的多线程
2022/05/02 Python
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS