详解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简化JavaScript开发分析
Feb 19 Javascript
Javascript基础 函数“重载” 详细介绍
Oct 25 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
Webpack设置环境变量的一些误区详解
Dec 19 Javascript
node.js使用stream模块实现自定义流示例
Feb 13 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
Jul 27 Javascript
关于element-ui表单中限制输入纯数字的解决方式
Sep 08 Javascript
微信小程序canvas动态时钟
Oct 22 Javascript
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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
openPNE常用方法分享
2011/11/29 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
php异常处理捕获错误整理
2019/09/23 PHP
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
javascript中Function类型详解
2015/04/28 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
Python随机读取文件实现实例
2017/05/25 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
Python之用户输入的实例
2018/06/22 Python
python清除函数占用的内存方法
2018/06/25 Python
python简单贪吃蛇开发
2019/01/28 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
2015年班主任个人工作总结
2015/03/31 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript