详解vue axios二次封装


Posted in Javascript onJuly 22, 2018

这段时间告诉项目需要,用到了vue。

刚开始搭框架的时候用的是vue-resource后面看到官方推荐axios就换过来了 顺便封装了一下

定义公共参数与引入组件:

import axios from 'axios'
import qs from 'qs'
 
axios.interceptors.request.use(config => {
  //显示loading
 return config
}, error => {
 return Promise.reject(error)
})
 
 
axios.interceptors.response.use(response => {
 return response
}, error => {
 return Promise.resolve(error.response)
})
 
function errorState(response) {
  //隐藏loading
 console.log(response)
 // 如果http状态码正常,则直接返回数据
 if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
  return response
   // 如果不需要除了data之外的数据,可以直接 return response.data
 }else{
  Vue.prototype.$msg.alert.show({
      title: '提示',
      content: '网络异常'
  })
 }
 
}
 
function successState(res) {
  //隐藏loading
 //统一判断后端返回的错误码
 if(res.data.errCode == '000002'){
    Vue.prototype.$msg.alert.show({
      title: '提示',
      content: res.data.errDesc||'网络异常',
      onShow () {
      },
      onHide () {
       console.log('确定')
      }
    })
 }else if(res.data.errCode != '000002'&&res.data.errCode != '000000') {
   Vue.prototype.$msg.alert.show({
      title: '提示',
      content: res.data.errDesc||'网络异常',
      onShow () {
 
      },
      onHide () {
       console.log('确定')
      }
    })
 }
}
const httpServer = (opts, data) => {
 
  let Public = { //公共参数
   'srAppid': ""
  }
 
  let httpDefaultOpts = { //http默认配置
     method:opts.method,
     baseURL,
     url: opts.url,
     timeout: 10000,
     params:Object.assign(Public, data),
     data:qs.stringify(Object.assign(Public, data)),
     headers: opts.method=='get'?{
      'X-Requested-With': 'XMLHttpRequest',
      "Accept": "application/json",
      "Content-Type": "application/json; charset=UTF-8"
     }:{
      'X-Requested-With': 'XMLHttpRequest',
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
     }
  }
 
  if(opts.method=='get'){
   delete httpDefaultOpts.data
  }else{
   delete httpDefaultOpts.params
  }
  
  let promise = new Promise(function(resolve, reject) {
   axios(httpDefaultOpts).then(
    (res) => {
     successState(res)
     resolve(res)
    }
   ).catch(
    (response) => {
     errorState(response)
     reject(response)
    }
   )
 
  })
 return promise
}
 
export default httpServer

封装理由:

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 1.2.x 升? 1.3.x 注意事项
May 06 Javascript
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
jQuery与ExtJS之选择实例分析
Aug 19 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
在Google 地图上实现做的标记相连接
Jan 05 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
jquery html5 视频播放控制代码
Nov 06 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
Nov 24 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
Vue3.0 手写放大镜效果
Jul 25 Vue.js
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 #Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 #Javascript
5分钟学会Vue动画效果(小结)
Jul 21 #Javascript
详解从Vue-router到html5的pushState
Jul 21 #Javascript
JS实现面向对象继承的5种方式分析
Jul 21 #Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
Jul 21 #Javascript
vue项目中添加单元测试的方法
Jul 21 #Javascript
You might like
PHP 采集程序中常用的函数
2009/12/09 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
smarty模板数学运算示例
2016/12/11 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
express框架下使用session的方法
2019/07/31 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
实例讲解python函数式编程
2014/06/09 Python
利用Python破解验证码实例详解
2016/12/08 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
Delphi工程师笔试题
2013/09/21 面试题
市优秀教师事迹材料
2014/02/05 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
团队会宣传标语
2014/10/09 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
python图片灰度化处理的几种方法
2021/06/23 Python