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报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
Jun 15 Javascript
vue路由的配置和页面切换详解
Sep 09 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 Javascript
JavaScript实现无限轮播效果
Nov 19 Javascript
基于JavaScript实现轮播图效果
Jan 02 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python中__call__方法示例分析
2014/10/11 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
化工专业大学生职业生涯规划书
2014/01/14 职场文书
5.1手机促销活动
2014/01/17 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
世界气象日活动总结
2015/02/27 职场文书
golang正则之命名分组方式
2021/04/25 Golang