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 相关文章推荐
javascript随机之洗牌算法深入分析
Jun 07 Javascript
Javascript之Date对象详解
Jun 07 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
浅谈node.js 命令行工具(cli)
May 10 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
Postman如何实现参数化执行及断言处理
Jul 28 Javascript
JS实现纸牌发牌动画
Jan 19 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防注入安全代码
2008/04/09 PHP
php三元运算符知识汇总
2015/07/02 PHP
详解php的socket通信
2015/08/11 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
python实现泊松图像融合
2018/07/26 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python help函数实例用法
2020/12/06 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
卫校中专生个人自我评价
2013/09/19 职场文书
中介业务员岗位职责
2014/04/09 职场文书
运动会方阵口号
2014/06/07 职场文书
节能环保演讲稿
2014/08/28 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
PHP中->和=>的意思
2021/03/31 PHP
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python