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+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
三种AngularJS中获取数据源的方式
Feb 02 Javascript
JavaScript面向对象程序设计教程
Mar 29 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
vue制作加载更多功能的正确打开方式
Oct 12 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
jQuery 如何实现一个滑动按钮开关
Dec 01 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
async/await优雅的错误处理方法总结
Jan 30 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
原生JavaScript实现轮播图
Jan 10 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实现的返回数据格式化类实例
2014/09/22 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
php微信开发接入
2016/08/27 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jquery自定义表格样式
2015/11/23 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
python实现保存网页到本地示例
2014/03/16 Python
Python中的类与类型示例详解
2019/07/10 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python实现扫雷游戏
2020/03/03 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
法学自荐信
2014/06/20 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
python flappy bird小游戏分步实现流程
2022/02/15 Python