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 相关文章推荐
json对象转字符串如何实现
Dec 02 Javascript
javascript结合Canvas 实现简易的圆形时钟
Mar 11 Javascript
node.js中 stream使用教程
Aug 28 Javascript
微信小程序开发图片拖拽实例详解
May 05 Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
JS判断数组那点事
Oct 10 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
微信小程序实现登录注册功能
Dec 29 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 socke 向指定页面提交数据
2008/07/23 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
python计算最小优先级队列代码分享
2013/12/18 Python
python套接字流重定向实例汇总
2016/03/03 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
django中send_mail功能实现详解
2018/02/06 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
十一酒店活动方案
2014/02/20 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
内勤主管岗位职责
2014/04/03 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
python的html标准库
2022/04/29 Python