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参数列表集合
Apr 06 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 Javascript
javascript中直接写php代码的方法
Jul 31 Javascript
Webpack 实现 Node.js 代码热替换
Oct 22 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
Mar 23 Javascript
解决vue 路由变化页面数据不刷新的问题
Mar 13 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
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
自己做矿石收音机
2021/03/02 无线电
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
JS高级笔记
2011/07/13 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
Python实现的石头剪子布代码分享
2014/08/22 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python数组定义方法
2016/04/13 Python
python编写分类决策树的代码
2017/12/21 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
远东集团网络工程师面试题
2014/10/20 面试题
传播学毕业生求职信
2013/10/11 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
实习班主任自我评价
2015/03/11 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书