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 相关文章推荐
jquery json 实例代码
Dec 02 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
jQuery 常用代码集锦(必看篇)
May 16 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
easyui-datagrid开发实践(总结)
Aug 02 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 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
Symfony2函数用法实例分析
2016/03/18 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python实现停车管理系统
2018/11/30 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Django配置跨域并开发测试接口
2020/11/04 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
毕业自我评价
2014/02/05 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
世界读书日的活动方案
2014/08/20 职场文书
爱的承诺书
2015/01/20 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript