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 相关文章推荐
alert和confirm功能介绍
May 21 Javascript
jQuery时间轴插件使用详解
Jul 16 Javascript
javascript如何写热点图
Dec 08 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
javascript基本算法汇总
Mar 09 Javascript
jquery自定义插件——window的实现【示例代码】
May 06 Javascript
javascript之IE版本检测超简单方法
Aug 20 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
React Native react-navigation 导航使用详解
Dec 01 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
Sep 11 Javascript
小程序实现横向滑动日历效果
Oct 21 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
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
Augularjs-起步详解
2016/07/08 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python常见异常分类与处理方法
2017/06/04 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
写出二分查找算法的两种实现
2013/05/13 面试题
杭州-DOTNET笔试题集
2013/09/25 面试题
申报优秀教师材料
2014/12/16 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers