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 相关文章推荐
如何取得中文输入的真实长度?
Jun 24 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
javascript 注释代码的几种方法总结
Jan 04 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
详解javascript中的babel到底是什么
Jun 21 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 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/06/17 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
js实现分割上传大文件
2016/03/09 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python多线程编程(一):threading模块综述
2015/04/05 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
安全保卫工作竞聘材料
2014/08/25 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年环卫工作总结
2014/11/22 职场文书
婚礼新人答谢词
2015/01/04 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书