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可以用vite打包吗(vite+vue3+element-plus项目搭建的方法步骤)
- vue单元测试实例(Vue-Jest 自动化测试基础配置详解)
- dockernginx服务器教程(Docker镜像+nginx 部署 vue 项目的方法)
- vue动态生成的下拉框如何获取值(Vue 级联下拉框的设计与实现)
- springboot vue 异地登录(vue+springboot实现登录验证码)
- vue实现一个tab栏(Vue实现tab导航栏并支持左右滑动功能)
- vue父组件怎么用子组件的数据(Vue使用v-model封装el-pagination组件的全过程)
- vue3 axios 怎么封装api(vue中如何简单封装axios浅析)
- uniapp使用vue写页面(分析uniapp入门之nvue爬坑记)
- vue定时器中间变颜色(Vue如何优雅的清除定时器)
- vue-cli请求数据的方式(vue-cli配置使用Vuex的全过程记录)
- vue怎么定义router的动态路由(vue.js Router中嵌套路由的实用示例)
- vue查询条件生成工具(vue实现四级导航及验证码的方法实例)
- vue引用js库报错(Vue插件报错:Vue.js is detected on this page.问题解决)
- vue3.0 自定义组件(Vue 3.0自定义指令的使用入门)
- 使用vue组件开发项目(Vue记事本实例详解)
- 0 1 岁婴儿最强作息指南,照着做养出天使宝宝(01岁婴儿最强作息指南)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
- 冬季养殖这6种阴生植物,方便又好养,你家有么(冬季养殖这6种阴生植物)
- 阴生植物为什么不怕照不到阳光(阴生植物为什么不怕照不到阳光)
- 阴生环境 耐阴地被植物,你知道哪些(阴生环境耐阴地被植物)
热门推荐
- linux增加静态路由(Linux添加静态路由两种实现方法解析)
- 香港云服务器优化有用吗(香港云服务器优势有哪些?)
- 云服务器怎么创建(怎样操作云服务器)
- python时间类的实现(Python日期时间Time模块实例详解)
- python弹球游戏编写过程(python实现坦克大战游戏 附详细注释)
- dedecms安装配置(浅析织梦dedecms三个最重要的安全设置)
- python基础教学之125 装饰器简介(python3 property装饰器实现原理与用法示例)
- 阿里云ecs安全设置(阿里云通过安全组实现不同账号下相同地域ECS内网互通)
- vue pdf预览插件(Vue-pdf实现在线预览PDF文件)
- php调试用什么工具好(调试php程序的简单步骤)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9