Axios代理配置及封装响应拦截处理方式


Posted in Vue.js onApril 07, 2022

Axios代理配置及响应拦截处理

Axios是vue官方推荐的异步处理方案,所以在几个vue的项目里,都用到了,所以这里写一下Axios的代理配置和响应拦截处理

代理配置

代理主要是为了解决跨域问题,但是现在常规解决跨域的方式,就是让后端配置响应头,使用cors方式跨域前端基本不需要任何处理。

但是有时候后端比较懒,就需要前端通过代理请求完成跨域,其实就是相当于在本地开了一个服务器,通过服务器进行向另一个服务器的代理请求。

但是这样又会产生一定问题,就是再部署到服务器上时,前端项目也必须设置代理,或者直接和后端项目部署同源环境

下面是代理请求的配置:

//config/index.js 文件里
module.exports = {
     dev{
        proxyTable: {
          '/': { //将开头为 ‘/'的接口替换
            target: 'http://www.hahaha.com/',  //导向这个地址
            changeOrigin: true,
            ws:true,
            pathRewrite: {
              '^/': ''    //将开头的斜杠去掉
            }
          },
          '/ws/**': {   //因为项目中用到了websocket 所以这里还配置websocket的代理
              target: 'ws://www.hahaha.com',
              ws: true,
              secure: false,
              logLevel: 'debug',
          }
      }
      ...
    }
   host: '0.0.0.0', //这里顺便一提,把host改成'0.0.0.0‘后可以让局域网内的电脑直接访问项目,默认是localhost
    ...
}

响应内容拦截处理

因为我们的axios请求响应会将网络请求信息的状态码返回,而通常我们实际运用中不是很需要这样的内容,为了方便我们可以进行统一处理,最后只返回真正的实际内容。

同时我们希望虽然网络请求成功,但是如果请求的内容失败的话,也会流转到catch步骤,也就是捕获错误

代码如下

const http = axios.create({
  baseURL: 'api/',
  timeout: 20000,
});   //创建axios对象
//对axios对象响应的拦截处理
http.interceptors.response.use((response) => {
//进入这里代表请求成功,网络请求状态码是200,但是我们要对请求的内容是否成功进行判断
  if (response.data.ErrorCode !== 0) {   //因为我们项目里设定0代表请求成功,所以非零的我们都会直接reject
    return Promise.reject(response.data);
  }   
  return Promise.resolve(response.data); //ErrorCode为0的直接返回response.data将网络的状态码直接过滤掉
}, (error) => {
//进入这里都网络状态码非200的,可能是因为接口错误,也可能是没有token等原因
  if(error.constructor.prototype.name == "Error") {  //这里判断返回的是否是错误对象,如果是的说明是网络请求错误
    Message({ showClose: true,
      message: '网络链接问题或登陆失效!',
      type: 'error'})
    return new Promise(() => {}) //这里我们可以进行链式异步处理
  }
  return error.data;//其他请求,说明是因为请求内容错误了,直接返回错误内容
});
//处理前返回内容
{
    status: 200
    statusText: "OK",
    data{
        ErrorCode: 0,
        token:'xxxx',
        name:'xxxx'
    }
}
//处理后返回内容
{
    ErrorCode: 0,
    token:'xxxx',
    name:'xxxx'
}

Axios的proxy代理配置解析

proxy实际上是一种前端开发中方便开发用的东西,它在本地可以跨域访问其他的网站,但是当页面打包之后,proxy就会失效

我是在vue.config.js中设置proxy的,代码如下

    proxy: {
      //匹配到的路径
      "/api": {
        target: "XXXXXXXXX", //目标主机地址
        changeOrigin: true,//是否启动代理
        pathRewrite: {    //重写路径
          "^/api": ''    //如果遇到前缀为'/api'的url,将它重写为''
        }
      }
    }

举个例子: 

proxy的target设置成http://www.web-jshtml.cn/aaa

如果你想访问http://192.168.1.114:8080/api/,这时候,你碰到了/api,你需要将/api前边的域名转换为target的地址,即

将http://192.168.1.114:8080转换为http://www.web-jshtml.cn/aaa

即是

http://www.web-jshtml.cn/aaa/api/这个地址,但是因为proxy的pathRewrite里需要将'/api'转换为空字符串,所以最终的访问地址是

http://www.web-jshtml.cn/aaa

直接上文档,文档里有详细资料

Axios代理配置及封装响应拦截处理方式

Axios代理配置及封装响应拦截处理方式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
对vue生命周期的深入理解
Dec 03 Vue.js
vue中如何自定义右键菜单详解
Dec 08 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 Vue.js
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
详解Vue3使用axios的配置教程
Apr 29 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 #Vue.js
vue实现拖拽交换位置
Apr 07 #Vue.js
Vue.Draggable实现交换位置
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
vue cli4中mockjs在dev环境和build环境的配置详情
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 #Vue.js
vue3使用vuedraggable实现拖拽功能
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
js中的 || 与 && 运算符详解
2018/05/24 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Django model反向关联名称的方法
2018/12/15 Python
对python模块中多个类的用法详解
2019/01/10 Python
Django实现跨域的2种方法
2019/07/31 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Python小白垃圾回收机制入门
2020/06/09 Python
10个示例带你掌握python中的元组
2020/11/23 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
python实现代码审查自动回复消息
2021/02/01 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
护士自荐信怎么写
2013/10/18 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
网络书店创业计划书
2014/02/07 职场文书
2015年采购员工作总结
2015/04/27 职场文书