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 相关文章推荐
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
Jan 21 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
seajs学习教程之基础篇
Oct 20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
May 30 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 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 mysql 判断update之后是否更新了的方法
2012/01/10 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
Jquery插件写法笔记整理
2012/09/06 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
Python计算三角函数之asin()方法的使用
2015/05/15 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python+opencv实现阈值分割
2018/12/26 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
快速了解Python开发环境Spyder
2020/06/29 Python
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
一套.net面试题及答案
2016/11/02 面试题
Ado与Ado.net的相同与不同
2014/12/08 面试题
工作疏忽检讨书
2014/01/25 职场文书
贷款承诺书范文
2014/05/19 职场文书
小学国庆节活动总结
2015/03/23 职场文书
单位计划生育责任书
2015/05/09 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python