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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
Javascript调试工具(下载)
Jan 09 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
jquery中 $.expr使用实例介绍
Jun 09 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
深入理解JavaScript中的浮点数
May 18 Javascript
js基于setTimeout与setInterval实现多线程
Jun 17 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 10 Javascript
微信小程序入门之指南针
Oct 22 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+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
javascript数组详解
2014/10/22 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python的等深分箱实例
2019/11/22 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
会计电算化专业自荐信
2014/03/15 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
爱国教育主题班会
2015/08/14 职场文书
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技