axios封装,使用拦截器统一处理接口,超详细的教程(推荐)


Posted in Javascript onMay 02, 2019

最近从0开始搭了一个vue-cli的项目, 虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以笔者对axios进行了统一接口处理,废话不多说,直接上代码。   

首先,在vue-cli项目的src路径下新建一个axios文件夹,在axios文件夹里新建aps.js和request.js,api.js用于写接口,对axios的封装写在request.js里,项目机构如图:

axios封装,使用拦截器统一处理接口,超详细的教程(推荐)

1. axios统一封装

然后开始统一封装axios, 首先引入axios、qs依赖,引入main.js主要是用于后面对接口进行统一处理,比如调接口的时候,显示loading等。这个main.js根据你个人情况,可加可不加。

//request.js
import axios from "axios";
import qs from "qs";
import app from "../main.js";

然后创建一个axios实例,这个process.env.BASE_URL在config/dev.evn.js、prod.evn.js里面进行配置:

/****** 创建axios实例 ******/
const service = axios.create({
  baseURL: process.env.BASE_URL, // api的base_url
  timeout: 5000 // 请求超时时间
});

axios实例创建好之后,开始使用request拦截器对axios请求配置做统一处理,具体如下:

/****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(config => {
  app.$vux.loading.show({
    text: '数据加载中……'
  });
 
  config.method === 'post'
    ? config.data = qs.stringify({...config.data})
    : config.params = {...config.params};
  config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
 
  return config;
}, error => { //请求错误处理
  app.$vux.toast.show({
    type: 'warn',
    text: error
  });
  Promise.reject(error)
});

然后是对response做统一处理,代码如下:

/****** respone拦截器==>对响应做处理 ******/
service.interceptors.response.use(
  response => { //成功请求到数据
    app.$vux.loading.hide();
    //这里根据后端提供的数据进行对应的处理
    if (response.data.result === 'TRUE') {
      return response.data;
    } else {
      app.$vux.toast.show({ //常规错误处理
        type: 'warn',
        text: response.data.data.msg
      });
    }
  },
  error => { //响应错误处理
    console.log('error');
    console.log(error);
    console.log(JSON.stringify(error));
 
    let text = JSON.parse(JSON.stringify(error)).response.status === 404
      ? '404'
      : '网络异常,请重试';
    app.$vux.toast.show({
      type: 'warn',
      text: text
    });
 
    return Promise.reject(error)
  }
);

最后,将我们的axios实例暴露出去,整个axios的封装就写完了。

export default service;

2. axios接口的调用方式

axios封装好之后,调用就很简单了。我们把接口统一写在api.js文件里。(当然,如果你的业务非常复杂的话,建议把不同业务的api分开放到不同的文件里,这样方便以后维护)。

注意:post请求参数放在data里面,get请求参数放在params里。

//api.js
import service from './request'
 
export const getPersonInfo = data => {
  return service({
    url: '/person_pay/getpersoninfo',
    method: 'post',
    data
  })
};

然后在具体的组件中进行调用。

//index.vue
import {getPersonInfo} from '../axios/api.js'
export default {
  created: async function () {
    const params = {
      card_no: '111'
    };
    let res = await getPersonInfo(params);
    console.log(res);
  }
}

附上项目代码地址:  https://github.com/xie991283109/vueCli-test

以上所述是小编给大家介绍的axios封装使用拦截器处理接口详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

 

Javascript 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
新发现一个骗链接的方法(js读取cookies)
Jan 11 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
bootstrap fileinput 上传插件的基础使用
Feb 17 Javascript
微信小程序 合法域名校验出错详解及解决办法
Mar 09 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 Javascript
JavaScript监听键盘事件代码实现
Jun 03 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 #Javascript
详解微信小程序缓存--缓存时效性
May 02 #Javascript
详解如何使用router-link对象方式传递参数?
May 02 #Javascript
详解Vue底部导航栏组件
May 02 #Javascript
微信小程序搭建自己的Https服务器
May 02 #Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
May 02 #Javascript
详解微信小程序网络请求接口封装实例
May 02 #Javascript
You might like
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python实现低通滤波器代码
2020/02/26 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
给老师的一封建议书
2014/03/13 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
公司庆典主持词
2015/07/04 职场文书
小学数学教学随笔
2015/08/14 职场文书
学术会议开幕词
2016/03/03 职场文书