vue项目的一些手动配置(使用vue项目配置多个代理的注意点)
vue项目的一些手动配置
使用vue项目配置多个代理的注意点在Vue项目的开发过程中,为了本地调试方便,我们通常会在 vue.config.js 中配置 devServer 来在本地启动一个服务器,在这个选项中,我们会配置proxy 属性来将指向到本地的请求(例如: /api/action) 代理到后端的开发服务器上(例如: http://xxx.xxx.xxx/api/action)
devServer: { port: 8081, proxy: { '/api/action': { target: 'http://192.168.200.106:81', changeOrigin: true, ws: true, secure: false } } }, ```
接口地址有重叠地址时,将匹配度低的放在后面。
例如:
- * 将 / 匹配到 192.191.1.1;
- * 将 /api 匹配到 192.191.1.2
- * 将 /api/action 匹配到 192.191.1.3
如果我们像下面一样书写:
proxy: { '/': { target: 'http://192.191.1.1', changeOrigin: true, ws: true, secure: false }, '/api': { target: 'http://192.191.1.2', changeOrigin: true, ws: true, secure: false }, '/api/action': { target: 'http://192.191.1.3', changeOrigin: true, ws: true, secure: false } }
那么所有到/, /api和 /api/action 的请求将全部被代理到 192.191.1.1 上面去
原因是这里的匹配实际上是一个正则匹配的过程,当我们请求 /api 时,首先读取到了配置项中的第一个,拿配置中的 / 去匹配请求中的 /api , 发现请求的/api 中包含配置项/, 匹配成功,直接将请求代理到了 192.191.1.1 上面去, 对/api/action的匹配也同理。
也就是说,它的匹配规则是: 拿配置项中的地址去匹配请求中的地址,如果请求中的地址中包含配置中的地址,则匹配成功,否则,拿下一个配置项继续匹配。
所以,配置中的地址与请求地址中匹配的字符越少,匹配度越低。 上例中配置中的地址(/)与请求地址(/api)只有一个字符是匹配的,所以匹配度低。
所以我们正确的写法应该是:
proxy: { '/api/action': { target: 'http://192.191.1.3', changeOrigin: true, ws: true, secure: false }, '/api': { target: 'http://192.191.1.2', changeOrigin: true, ws: true, secure: false }, '/': { target: 'http://192.191.1.1', changeOrigin: true, ws: true, secure: false } }
这样到三个地址的请求就都可以正确代理到相应的地址去了
多个地址代理同一个target 时,可进行合并在实际应用中,由于后端采用微服务模式开发,在开发阶段,我们可能会将不同的服务代理到不同的地址上,当服务很多时,我们代理的数量也就很多:
proxy: { '/api/action': { target: 'http://192.191.1.3', changeOrigin: true, ws: true, secure: false }, '/api/action2': { target: 'http://192.191.1.4', changeOrigin: true, ws: true, secure: false }, '/api/action3': { target: 'http://192.191.1.3', changeOrigin: true, ws: true, secure: false }, '/api/action4': { target: 'http://192.191.1.4', changeOrigin: true, ws: true, secure: false }, '/api/action5': { target: 'http://192.191.1.5', changeOrigin: true, ws: true, secure: false }, '/api/action6': { target: 'http://192.191.1.6', changeOrigin: true, ws: true, secure: false }, '/api/action7': { target: 'http://192.191.1.5', changeOrigin: true, ws: true, secure: false }, '/api/action8': { target: 'http://192.191.1.6', changeOrigin: true, ws: true, secure: false }, '/api/action9': { target: 'http://192.191.1.7', changeOrigin: true, ws: true, secure: false }, '/api': { target: 'http://192.191.1.2', changeOrigin: true, ws: true, secure: false }, '/': { target: 'http://192.191.1.1', changeOrigin: true, ws: true, secure: false }, }
当配置的代理数量超过十个时,开发环境编译打包时会报以下错误:
为了解决报错,也同时减少代码体积,我们可以对具有同一个target的配置项进行合并,由上文我们可知,这里其实是一个正则匹配的过程,那我们就可以利用正则语法将他们进行合并:
proxy: { '/api/action|/api/action3': { target: 'http://192.191.1.3', changeOrigin: true, ws: true, secure: false }, '/api/action2|/api/action4'': { target: 'http://192.191.1.4', changeOrigin: true, ws: true, secure: false }, '/api/action5|/api/action7': { target: 'http://192.191.1.5', changeOrigin: true, ws: true, secure: false }, '/api/action6|/api/action8': { target: 'http://192.191.1.6', changeOrigin: true, ws: true, secure: false }, '/api/action9': { target: 'http://192.191.1.7', changeOrigin: true, ws: true, secure: false }, '/api': { target: 'http://192.191.1.2', changeOrigin: true, ws: true, secure: false }, '/': { target: 'http://192.191.1.1', changeOrigin: true, ws: true, secure: false }, }
当然,在正式部署的时候,还是需要后端去做统一代理。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。
- vue商城购物车数据(vue实现购物车全部功能的简单方法)
- vue渲染数据的过程(Vue前端高效开发之列表渲染指令)
- vue和springboot分页开发实现(解决Vue+SpringBoot+Shiro跨域问题)
- vuekeep-alive源码(vue中keepAlive组件的作用和使用方法详解)
- vue购物车简单项目(vue实现简单购物车案例)
- vue功能测试和生产环境切换(vue 单元测试的推荐插件和使用示例)
- vuevlog制作软件(Vue实现Dialog封装)
- vue全局配置文件env(vue项目多环境配置.env的实现)
- vue可以使用模态框modal吗(vue基于Teleport实现Modal组件)
- vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
- vue实现一个tab栏(Vue实现tab导航栏并支持左右滑动功能)
- vue创建dom节点(Vue批量更新dom的实现步骤)
- vue自定义组件修饰符(Vue自定义组件使用事件修饰符的踩坑记录)
- vue怎么实现预览与放大(Vue实现牌面翻转效果)
- vue考试链接重置(Vue实现答题功能)
- vue查询条件生成工具(vue实现四级导航及验证码的方法实例)
- 《金陵秘事》的剧情跌宕起伏 给观众带来的怎样的感官体验(金陵秘事的剧情跌宕起伏)
- 少儿口才表达影响未来一生,50首经典绕口令和孩子玩出聪明大脑(少儿口才表达影响未来一生)
- 玩网游居然让人更友善 很难以让人置信(玩网游居然让人更友善)
- 学好汉语拼音,从娃娃绕口令抓起,平时还是要多练 收藏好(从娃娃绕口令抓起)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
热门推荐
- html5常用标记(HTML5超文本标记语言的实现方法)
- python中导入模块的命令(Python3 导入上级目录中的模块实例)
- laravel请求处理流程(详解如何实现Laravel的服务容器的方法示例)
- dockerswarm使用教程(Docker Swarm集群管理的使用及原理解析)
- dede模板本地部署(dedecms5.7首页和列表页模板中动态调用文章浏览次数的方法)
- serv-u的默认端口号(Serv-U 8.0 服务器中文乱码问题的解决)
- python3web编程基础教程(python初学者,用python实现基本的学生管理系统python3代码实例)
- nginx负载均衡原理3种(Nginx负载均衡以及动静分离的原理与配置)
- HTML5 <figure> 、<figcaption>标签
- centos装docker稳定吗(Centos8无法安装docker问题的解决方法)