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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
javascript中注册和移除事件的4种方式
Mar 20 Javascript
jquery获取元素值的方法(常见的表单元素)
Nov 15 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
利用PM2部署node.js项目的方法教程
May 10 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
js实现小时钟效果
Mar 25 Javascript
Vue使用screenfull实现全屏效果
Sep 17 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 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中session退出登陆问题
2014/02/27 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PHP中常用的魔术方法
2017/04/28 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
Python编程中对文件和存储器的读写示例
2016/01/25 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
解决Python requests 报错方法集锦
2017/03/19 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
Final类有什么特点
2012/04/25 面试题
受欢迎的大学生自我评价
2013/12/05 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
毕业设计致谢词
2015/05/14 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
Java spring单点登录系统
2021/09/04 Java/Android