详解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 相关文章推荐
Javascript 中介者模式实例
Dec 16 Javascript
Extjs入门之动态加载树代码
Apr 09 Javascript
用js来解决ajax读取页面乱码
Nov 28 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
js浮动图片的动态效果
Jul 10 Javascript
Javascript 命名空间模式
Nov 01 Javascript
js 设置缓存及获取设置的缓存
May 08 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
原生JS实现手动轮播图效果实例代码
Nov 22 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP中文乱码解决方案
2015/03/05 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
关于jQuery中的end()使用方法
2011/07/10 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python selenium firefox使用详解
2019/02/26 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python属于解释型语言么
2020/06/15 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
数控技术应届生求职信
2013/11/13 职场文书
学习十八大报告感言
2014/02/28 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
《悯农》教学反思
2014/04/28 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
汽车销售员工作总结
2015/08/12 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python