项目管理者联盟 | 中国工程管理网 | 中国研发管理网   会员中心 资料库 博客 圈子

PMI-ACP®认证

适合敏捷开发项目
敏捷项目管理最佳实践

网络课程

PMI-PBA®认证

重视项目商业分析
商业价值与需求分析能力

网络课程

NPDP®认证

产品管理国际认证
全球产品管理最佳实践

网络课

PMP®认证

单项目管理经典指南
年轻项目经理首选

北京 | 直播 | 录播

PgMP®认证

大型复杂项目全球标准
定位高级项目管理层

网络班

PfMP®认证

链接战略与项目
实现组织资源投资回报

全球直播

软考项目管理

信息系统项目管理师
系统集成项目管理工程师

计划 | 报名 | 经验

论坛
价值源于交流与分享
会员区:
登陆ID 密  码
功能区: 公告建议 | 帖子搜索 | 管理团队 | 荣誉版主 | 帮助手册






 项目型组织  项目管理  工程项目  科技项目  项目化管理  管理软件  资格认证  职业休闲
EPM体系与流程 综合集成管理 总承包管理 IT软件开发 项目型制造 P3E/P6 PMP | PgMP 职业发展探讨
组织与人力资源 进度,范围,成本 国际工程 生物制药 专业服务 微软PROJECT IPMP | PRINCE2 管理学堂
项目管理信息化 团队建设与沟通 房地产 汽车设计开发 生活项目 PowerOn专版 软考项目管理 英语角|读书版
多项目与大项目 质量与风险 监理与咨询 手机数码 文体娱乐 注册建造师 房车吃游
PMO建设与管理 采购与合同 工程设计 项目管理硕士 闲聊版|商务版
俱乐部北京 | 大连 | 福州 | 广州 | 杭州 | 南京 | 山东 | 上海 | 深圳 | 四川 | 天津 | 武汉 | 西安 | 郑州 | 申请成立 TOP榜精华 | 最新 | 最热 | 会员

版面信息

说明:失败的IT项目比比皆是,进度延迟,预算超支,客户需求多变,成员加班抱怨...IT项目(软件开发.,信息系统实施等)寻求新生

本版版主

camer
登录:2013/7/2
次数:867
注册:2003/3/3
发帖:2745
dorothy
登录:2016/12/15
次数:804
注册:2004/9/6
发帖:993
steveli2008
登录:2009/5/26
次数:464
注册:2003/5/12
发帖:1026
zhf_karen
登录:2015/6/2
次数:346
注册:2005/6/13
发帖:469

俱乐部导航

北京大连福州广州杭州
南京山东上海深圳四川
天津武汉西安郑州 

联盟·近期活动

社区热点

华师大CTO学院:科创生态建设与创.
宏发电声江玫瑰谈PgMP:“下好一盘.
PgMP:交付能力与创造未来的项目管.
开放讲座|《项目组合管理与PfMP认证
开放讲座|项目组合管理与PfMP认证
开放讲座|PgMP:项目管理思维与方法
开放讲座|《项目组合管理与PfMP认证
网络讲座|《项目组合管理与个人职业
开放讲座|《项目组合管理与PfMP认证
网络直播|产品经理的四大核心技能提

精彩专题

如何做好项目沟通计划

软件项目质量管理

国际工程索赔与反索赔

更多:

推荐信息

·项目经理沙龙俱乐部
·推荐项目管理公开课程
·联盟VIP会员服务
·联盟99元大课堂
·建造师课程辅导免费试听

社区圈子

集团企业生态体.
圈主:ETPPM
行业:综合应用

广东项目管理俱.
圈主:李恒
行业:综合应用

企业项目管理体.
圈主:zhenjm
行业:综合应用

项目管理知识宝.
圈主:wenyu2010
行业:工程设计安装

管理者论坛
圈主:maurice9
行业:综合应用

联系社区管理员

咨询电话 010-82273401/11
斑竹申请 admin@mypm.net


版权所有 © 2003-2004
京ICP证070584号 
BBS业务许可2007第353号 
最佳显示模式:1024*768像素
项目管理与PMP认证
前端开发的"端水艺术":如何优雅驾驭多后端并行联调? [发表于 2025/3/18]
状态 开放帖 浏览量 117   
同样的接口,同样的前缀,只是后端地址不一样,怎么同时代理多个地址呢?也就是一个前端,怎么连接多个后端的地址?

一个前端,需要同时和N个后端联调
一个需求里有若干个模块,分别给不同的后端开发,前端需要和N个后端联调
本地开启一个端口给测试,然后你需要去做其他的需求,但是其他的需求需要连接另一个后端接口
其他情况,总之:1个前端 VS N个后端
上述场景,都是一个前端,联调N个后端的场景,你可能没遇到过,但是确实存在上述的场景。尤其是第三种最为常见,你会一直等测试完了、再去换一个后端代理地址接着开发吗?当然不能,这样做很浪费时间,说明你不是一个合格的牛马,牛马的觉悟不够,牛马是不会让自己闲着的。
那么,怎么办呢?和A联调时proxy指向url-A,和B联调时proxy指向url-B……换其他人联调时,你是把本地项目关掉,然后换个proxy代理、再重启一下吗?
当然可以,如果你不嫌麻烦的话!那么有没有好办法呢?
这个问题问得好,当然有了!

一、解决方案
本例以vue2的vue-cli方式【webpack】为例

(一)思路
既然vue.config.js能代理一个proxy,那么能不能代理多个proxy呢?当然能!

本文先讲解传统模式的代理,以后写一个函数式代理
vite有更好的代理方式,暂且不表

(二)实现步骤
1.创建项目
创建一个空的vue2项目
vue create project-name
默认情况下,npm run serve会启动8080端口

2.目标
我希望不同的端口,指向不同的后端代理proxy地址,如:
8100端口,代理后端7001端口
8105端口,代理后端7002端口
没毛病吧?本文以代理2个后端为例,其余的大家自行补充

(三)前端配置
1.安装cross-env
yarn add cross-env
cross-env是nodejs设置环境变量的工具,它解决了不同操作系统之间环境变量设置语法不一致的问题,具体可自行搜索

2.配置vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
port: process.env.PORT || 8100,
open: false,
proxy: {
'/api': {
target: getProxyTarget(process.env.PORT),
changeOrigin: true,
pathRewrite: { '^/api': '' }
}
},
},
})

function getProxyTarget(port) {
switch (port) {
case '8100':
return 'http://127.0.0.1:7001'
case '8105':
return 'http://127.0.0.1:7002'
default:
return 'http://127.0.0.1:7001' // 默认代理地址
}
}
上述代码,默认设置启动端口为8100,并且getProxyTarget函数可以根据不同的端口,指向不同的代理地址。

3.配置package.json
{
"name": "more-proxy",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"serve:8005": "cross-env PORT=8105 vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"cross-env": "^7.0.3",
"vue": "^2.6.14"
},
"devDependencies": {
"@vue/cli-service": "~5.0.0",
"vue-template-compiler": "^2.6.14"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
上述代码,重点是serve:8005这行,就是你要代理哪个端口,这里需要你在vue.config.js写对应的映照proxy

(三)测试
上述配置已经实现了我们的需求,那么,具体测试一下吧。
本地启动两个nodejs服务,分别为7001和7002端口,内容如下

/// 7001端口
const http = require('http');

const hostname = '127.0.0.1';
const port = 7001;

const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('my port is 7001!');
});

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
/// 7002端口
const http = require('http');

const hostname = '127.0.0.1';
const port = 7002;

const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('my port is 7002!');
});

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
然后前端把上面的2个端口启动,写一个测试函数
mounted() {
fetch('/api').then(() => {})
}
效果如下:
8100已经成功代理7001了
同样的,8105也代理了7002
其余的vue3,react,也可以用类似的思路
如果有其他更好的方案,可以评论留言。
顺便吆喝一句,如果有在看机会https://jsj.top/f/o38ijj的朋友,感兴趣可以看看,技术大厂,前后端测试捞人,待遇给的还可以。


>>> 由论坛统一发布的广告:
楼主 帅哥约,不在线,有人找我吗?jinchanchan


职务 无
军衔 中士
来自 北京市
发帖 143篇
注册 2024/11/14
PM币 294
经验 364点

  
!  您尚未登录,不能回复主题。    现在 登录  注册
关于联盟 | VIP会员 | 培训服务 | PMP认证 | PgMP认证 | 刊物出版 | 沙龙会议 | 人才服务 | 广告投放 | 联系我们 | 友情链接
建设运营:共创时网络
版权所有 京ICP证070584号 BBS业务许可2007第353号