详解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 相关文章推荐
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
jQuery Ajax 实例全解析
Apr 20 Javascript
JS分页控件 可用于无刷新分页
Jul 23 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 Javascript
jquery选择器使用详解
Apr 08 Javascript
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
vue.js组件之间传递数据的方法
Jul 10 Javascript
Vue如何获取数据列表展示
Dec 11 Javascript
用vue设计一个日历表
Dec 03 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下载远程图片并保存到本地方法总结
2016/01/22 PHP
PHP解决中文乱码
2017/04/28 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
浅谈python中set使用
2016/06/30 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
python实现简单猜单词游戏
2020/12/24 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
高三自我鉴定范文
2013/10/19 职场文书
军训的自我鉴定
2013/12/10 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
施工安全责任书
2014/04/14 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书