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 表单取值常用代码
Dec 22 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
js导出格式化的excel 实例方法
Jul 17 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
vue中mint-ui的使用方法
Apr 04 Javascript
vue实现新闻展示页的步骤详解
Apr 11 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
给初学PHP的5个入手程序
2006/11/23 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
详解js删除数组中的指定元素
2018/10/31 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
python爬虫---requests库的用法详解
2020/09/28 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
专升本自我鉴定
2013/10/10 职场文书
自我鉴定注意事项
2014/01/19 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
主管会计岗位责任制
2014/02/10 职场文书
学校消防安全责任书
2014/07/23 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
建国大业观后感
2015/06/01 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技