详解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应用于login页面的问题及解决
Oct 17 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
javascript数组的使用
Mar 28 Javascript
JavaScript打印iframe内容示例代码
Aug 20 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 Javascript
Vue完整项目构建(进阶篇)
Feb 10 Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
vue中的过滤器实例代码详解
Jun 06 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 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安装攻略:常见问题解答(一)
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
php银联网页支付实现方法
2015/03/04 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
js实现无缝滚动图
2017/02/22 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python遍历路径破解表单的示例
2020/11/21 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
初婚初育证明
2014/01/14 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
Python实现简单得递归下降Parser
2022/05/02 Python