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 17 Vue.js
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
Dec 19 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 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
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
php 地区分类排序算法
2013/07/01 PHP
destoon数据库表说明汇总
2014/07/15 PHP
php生成shtml类用法实例
2014/12/09 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
python的dict判断key是否存在的方法
2020/12/09 Python
python源文件的字符编码知识点详解
2021/03/04 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
中国入世承诺
2014/04/01 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
Java 定时任务技术趋势简介
2022/05/04 Java/Android