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 相关文章推荐
你可能不再需要JQUERY
Mar 09 Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 Javascript
JavaScript实现的SHA-1加密算法完整实例
Feb 02 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
深入理解node.js之path模块
May 03 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
Jun 19 Javascript
JavaScript之创意时钟项目(实例讲解)
Oct 23 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 Javascript
JS前端使用Canvas快速实现手势解锁特效
Sep 23 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分页详细讲解(有实例)
2013/10/30 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
javascript 播放器 控制
2007/01/22 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Python字符串格式化
2015/06/15 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
python 同时运行多个程序的实例
2019/01/07 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
广州盈通面试题
2015/12/05 面试题
给排水工程师岗位职责
2013/11/21 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
领导视察欢迎词
2014/01/15 职场文书
护理工作感言
2014/01/16 职场文书
给校长的建议书500字
2014/05/15 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
中秋节活动总结
2014/08/29 职场文书
评职称个人总结
2015/03/05 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python