详解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 相关文章推荐
js 对象是否存在判断
Jul 15 Javascript
JavaScript 动态生成方法的例子
Jul 22 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
js使用心得分享
Jan 13 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
JQuery删除DOM节点的方法
Jun 11 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
js实现九宫格布局效果
May 28 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 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
PHP安全配置
2006/10/09 PHP
PHP源码之explode使用说明
2011/08/05 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
读jQuery之一(对象的组成)
2011/06/11 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
JS实现打字游戏
2019/12/17 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
python获取list下标及其值的简单方法
2016/09/12 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Django中的cookie和session
2019/08/27 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python流程控制常用工具详解
2020/02/24 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
楼面经理岗位职责范本
2014/02/18 职场文书
大学运动会入场词
2014/02/22 职场文书
网页美工求职信范文
2014/04/17 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android