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脚本特性
Sep 13 Javascript
JavaScript如何从listbox里同时删除多个项目
Oct 12 Javascript
jquery 新建的元素事件绑定问题解决方案
Jun 12 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
Dec 20 Javascript
Webpack 实现 Node.js 代码热替换
Oct 22 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
Vue实现按钮旋转和移动位置的实例代码
Aug 09 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
javascript中函数的写法实例代码详解
Oct 28 Javascript
DatePickerDialog 自定义样式及使用全解
Jul 09 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
浅谈php://filter的妙用
2019/03/05 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
python网络编程之文件下载实例分析
2015/05/20 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
在pycharm中显示python画的图方法
2019/08/31 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
鲜花方阵解说词
2014/02/13 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
感恩的演讲稿
2014/05/06 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers