vue axios 二次封装的示例代码


Posted in Javascript onDecember 08, 2017

这段时间告诉项目需要,用到了vue。

刚开始搭框架的时候用的是vue-resource后面看到官方推荐axios就换过来了 顺便封装了一下

//引入axios
import axios from 'axios'

let cancel ,promiseArr = {}
const CancelToken = axios.CancelToken;
//请求拦截器
axios.interceptors.request.use(config => {
 //发起请求时,取消掉当前正在进行的相同请求
 if (promiseArr[config.url]) {
  promiseArr[config.url]('操作取消')
  promiseArr[config.url] = cancel
 } else {
  promiseArr[config.url] = cancel
 }
  return config
}, error => {
 return Promise.reject(error)
})

//响应拦截器
axios.interceptors.response.use(response => {
 return response
}, error => {
 return Promise.resolve(error.response)
})

axios.defaults.baseURL = '/api'
//设置默认请求头
axios.defaults.headers = {
 'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 10000

export default {
 //get请求
 get (url,param) {
  return new Promise((resolve,reject) => {
  axios({
   method: 'get',
   url,
   params: param,
   cancelToken: new CancelToken(c => {
   cancel = c
   })
  }).then(res => {
   resolve(res)
  })
  })
 },
 //post请求
 post (url,param) {
  return new Promise((resolve,reject) => {
  axios({
   method: 'post',
   url,
   data: param,
   cancelToken: new CancelToken(c => {
   cancel = c
   })
  }).then(res => {
   resolve(res)
  })
  })
  }
 }

说明

1、为防止发起请求时,当前正在进行的相同请求,在请求拦截器中加入了hash判断,将相同请求url拦截

2、将axios中get,post公共配置抽离出来

axios.defaults.baseURL = '/api'
//设置默认请求头
axios.defaults.headers = {
 'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 10000

3、get,post请求的封装 可能你会问,这里的axios返回的就是promise对象,为什么还要再次对get,post封装一次promise.因为我这边的话,在开发中使用async await会出现数据请求失败的情况,报的错就是返回的不是promise对象。(ps:可async await返回的就是promise呀,这个问题后续再搞一下)就直接return了一个promise对象,以避免上面的错误。下面是请求接口的一个例子

import req from '../api/requestType'
/**
 * 拼团详情
 */
export const groupDetail = param => {
 return req.get('/RestHome/GroupDetail',param)
}

下面是数据的获取

async getData() {
 const params = {
  TopCataID: 0,
  pageNumber: this.pageNumber,
  pageSize: this.pageSize
 }
 const res = await groupList(params)
},

到这里我们就简单的封装了一下适合自己项目的axios

封装理由:

1、可以和后端商量好错误码在这统一提示统一处理,省去不必要的麻烦

2、如果做接口全报文加解密都可以在此处理

接口统一归类: 

const serviceModule = { 
 getLocation: { 
 url: ' service/location/transfor', 
 method: 'get' 
 } 
} 
const ApiSetting = {...serviceModule } 
 
export default ApiSetting

归类好处:

1、后期接口升级或者接口名更改便于维护

http调用:

<script> 
import http from "../../lib/http.js"; 
import ApiSetting from "../../lib/ApiSetting.js"; 
export default { 
 created: function() { 
 http(ApiSetting.getLocation,{"srChannel": "h5",}) 
 .then((res)=>{ 
  console.log(res) 
 },(error)=>{ 
  console.log(error)  
 }) 
 }, 
 methods: { 
 
 } 
} 
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
Nov 22 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
JS字符串的切分用法实例
Feb 22 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
Vue中render函数的使用方法
Jan 31 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
小程序自动化测试的示例代码
Aug 11 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 #Javascript
js断点调试心得分享(必看篇)
Dec 08 #Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 #Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 #Javascript
微信小程序实现下载进度条的方法
Dec 08 #Javascript
js断点调试经验分享
Dec 08 #Javascript
javaScript手机号码校验工具类PhoneUtils详解
Dec 08 #Javascript
You might like
最准确的php截取字符串长度函数
2015/10/29 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
TensorFlow实现Batch Normalization
2018/03/08 Python
python list格式数据excel导出方法
2018/10/31 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
统计每一学生的平均成绩
2014/06/06 面试题
汽车专业学生自我评价
2014/01/19 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
机动车交通事故协议书
2015/01/29 职场文书
2015年党总支工作总结
2015/05/25 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP