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 25 Javascript
javascript对象之内置对象Math使用方法
Apr 16 Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
jquery处理json对象
Nov 03 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
Vue结合后台导入导出Excel问题详解
Feb 19 Javascript
vue+springboot图片上传和显示的示例代码
Feb 14 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 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编码规范之注释和文件结构说明
2010/07/09 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
python中查看变量内存地址的方法
2015/05/05 Python
python下10个简单实例代码
2017/11/15 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python实现学生成绩管理系统
2020/04/05 Python
对于Python深浅拷贝的理解
2019/07/29 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
计算机维护专业推荐信
2014/02/27 职场文书
中国入世承诺
2014/04/01 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
2015年市场部工作总结
2015/04/30 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
离婚纠纷代理词
2015/05/23 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
德劲DE1108畅想
2021/04/22 无线电
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers