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 相关文章推荐
iframe 异步加载技术及性能分析
Jul 19 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
JsRender for object语法简介
Oct 31 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
Mar 19 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 Javascript
TypeScript之调用栈的实现
Dec 31 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
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
javascript的console.log()用法小结
2012/05/31 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
三种带箭头提示框总结实例
2016/06/14 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
12个非常有用的JavaScript技巧
2017/05/17 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python opencv实现证件照换底功能
2019/08/19 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
keras中的backend.clip用法
2020/05/22 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
英文翻译的自我评价语句
2013/10/04 职场文书
出生医学证明样本
2014/01/17 职场文书
运动会100米解说词
2014/01/23 职场文书
导购员的岗位职责
2014/02/08 职场文书
一年级班主任感言
2014/03/08 职场文书
2015年助残日活动总结
2015/03/27 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
七年级思品教学反思
2016/02/20 职场文书
golang中的空slice案例
2021/04/27 Golang
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android