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如何excel表格上传功能(Vue + iView实现Excel上传功能的完整代码)
- vueelementui表格操作(Vue组件库ElementUI实现表格列表分页效果)
- vuejs组件使用教程交流(Vue vee-validate插件的简单使用)
- vue3.0安装element(vue3+electron12+dll开发客户端配置详解)
- vue3封装table组件(Vue封装通用table组件的完整步骤记录)
- vue的路由模式有几种(Vue 路由返回恢复页面状态的操作方法)
- vue一个组件两种样式(Vue实现动态样式的多种方法汇总)
- elementuivue使用技巧(Vue Element前端应用开发之常规Element界面组件)
- vue图片组件使用方法(Vue图片裁剪组件实例代码)
- vue指令使用技巧(Vue指令工作原理实现方法)
- vuetable表格合并(vue-table实现添加和删除)
- vue如何获取元素(vue第一次获取不到元素的解决方法记录)
- vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)
- vue3组件通讯消息(Vue3实现Message消息组件示例)
- vue身份验证(详解vue身份认证管理和租户管理)
- vueelementui动态表格(Vue Element前端应用开发之常规的JS处理函数)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
- 如何追女孩子(如何追女孩子的技巧和方法)
- 是不是快乐全被你拿走了(而是你得到的)
热门推荐
- 如何用thinkphp框架来写一个网站(php tpl模板引擎定义与使用示例)
- laravelblade界面(laravel5.1框架基础之Blade模板继承简单使用方法分析)
- python多线程多进程运行场景(Python多线程同步---文件读写控制方法)
- js中alert加参数写法(详解JavaScript Alert函数执行顺序问题)
- python动态数组原理(Python实现的旋转数组功能算法示例)
- SqlParameter的size属性
- mysql用什么类型数据(MySQL 数据类型选择原则)
- tomcat的startup闪退的原因(直接双击启动tomcat中的startup.bat闪退原因及解决方法)
- html5书写规范教学(Html5踩坑记之mandMobile使用小记)
- dedecms文章顺序(dedecms 分页标题提取方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9