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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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正则
2006/07/07 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python中的random()方法的使用介绍
2015/05/15 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
python 读取串口数据的示例
2020/11/09 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
银行学习十八大感想
2014/01/11 职场文书
自我鉴定注意事项
2014/01/19 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
应届生求职信范文
2014/06/30 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
学生党员检讨书范文
2014/12/27 职场文书
基层党建工作简报
2015/07/21 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
javaScript Array api梳理
2021/03/31 Javascript
你需要掌握的20个Python常用技巧
2022/02/28 Python