• 最新
  • 热门
  • 所有
  • 外汇
  • 24 小时
  • 期货
  • 基金
  • 贵金属
  • 股票
前端开发的" 端水艺术":如何优雅驾驭多后端并行联调?

前端开发的" 端水艺术":如何优雅驾驭多后端并行联调?

2025 年 3 月 18 日
国家统计局:8月CPI同比下降0.4% PPI同比下降2.9%

国家统计局:8 月 CPI 同比下降 0.4% PPI 同比下降 2.9%

2025 年 9 月 10 日

四维透视化工产业 「金九银十」 成色

2025 年 9 月 10 日

行业反内卷深化促长期重构,石化 ETF(159731) 短期调整迎低位布局机会

2025 年 9 月 10 日
广告

以军突袭哈马斯多哈据点引发地区震荡,特朗普罕见公开批评内塔尼亚胡

2025 年 9 月 10 日

市场监管总局已约谈主要外卖平台,抵制恶性补贴

2025 年 9 月 10 日
锂电「反内卷」显成效?六氟磷酸锂涨价潮袭来 业内:厂商前期主动降负荷

锂电 「反内卷」 显成效?六氟磷酸锂涨价潮袭来 业内:厂商前期主动降负荷

2025 年 9 月 10 日
黄金交易提醒:金价历史新高后上演「过山车」,这是见顶了吗?关注美国通胀数据

黄金交易提醒:金价历史新高后上演 「过山车」,这是见顶了吗?关注美国通胀数据

2025 年 9 月 10 日

史上最贵 iPhone 诞生!苹果 iPhone 17 系列正式发布 :Pro Max 顶配 2TB 版本售价高达 17999 元

2025 年 9 月 10 日
凌晨!苹果重大发布!iPhone 17搭载A19芯片 史上最薄款国行版起售价7999元!

凌晨!苹果重大发布!iPhone 17 搭载 A19 芯片 史上最薄款国行版起售价 7999 元!

2025 年 9 月 10 日
券商调研与评级同步发力 偏好红利、科技 白酒股难入法眼

券商调研与评级同步发力 偏好红利、科技 白酒股难入法眼

2025 年 9 月 10 日

宁德时代设定枧下窝复产目标!能否如期复产,尚未有定论

2025 年 9 月 10 日
【读财报】QDII基金8月表现:平均回报2.84% 摩根基金、华夏基金、嘉实基金产品业绩领跑

【读财报】QDII 基金 8 月表现:平均回报 2.84% 摩根基金、华夏基金、嘉实基金产品业绩领跑

2025 年 9 月 10 日
金桂财经
广告
2025 年 9 月 10 日 星期三
联系我们
合作建议
  • 首页
  • 24 小时
  • 全球金融
  • 股市风云
  • 基金动态
  • 金财眼
  • 期货新闻
  • 期货研报
  • 外汇市场
  • 贵金属
  • 未来科技
  • 登录& 注册
没有结果
查看所有结果
  • 首页
  • 24 小时
  • 全球金融
  • 股市风云
  • 基金动态
  • 金财眼
  • 期货新闻
  • 期货研报
  • 外汇市场
  • 贵金属
  • 未来科技
没有结果
查看所有结果
金桂财经
没有结果
查看所有结果

前端开发的" 端水艺术":如何优雅驾驭多后端并行联调?

来自 金桂财经
2025 年 3 月 18 日
在 期货
0


同样的接口,同样的前缀,只是后端地址不一样,怎么同时代理多个地址呢?也就是一个前端,怎么连接多个后端的地址?

YOU MAY ALSO LIKE

国家统计局:8 月 CPI 同比下降 0.4% PPI 同比下降 2.9%

券商调研与评级同步发力 偏好红利、科技 白酒股难入法眼

  • 一个前端,需要同时和 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 有更好的代理方式,暂且不表

实现步骤

创建项目

创建一个空的 vue2 项目
vue create project-name
默认情况下,npm run serve 会启动 8080 端口

目标

我希望不同的端口,指向不同的后端代理 proxy 地址,如:

  • 8100 端口,代理后端 7001 端口
  • 8105 端口,代理后端 7002 端口
    没毛病吧?本文以代理 2 个后端为例,其余的大家自行补充
    ## 前端配置
    ### 安装 cross-env
    yarn add cross-env
    cross-env 是 nodejs 设置环境变量的工具,它解决了不同操作系统之间环境变量设置语法不一致的问题,具体可自行搜索
    ### 配置 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 函数可以根据不同的端口,指向不同的代理地址。
### 配置 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,也可以用类似的思路
如果有其他更好的方案,可以评论留言。

顺便给大家分享一下,民族企业大厂,前后端测试捞人,待遇给的还不错,感兴趣的可以来试试!

Search

没有结果
查看所有结果

一周热门

国家统计局:8月CPI同比下降0.4% PPI同比下降2.9%

国家统计局:8 月 CPI 同比下降 0.4% PPI 同比下降 2.9%

2025 年 9 月 10 日

四维透视化工产业 「金九银十」 成色

2025 年 9 月 10 日

行业反内卷深化促长期重构,石化 ETF(159731) 短期调整迎低位布局机会

2025 年 9 月 10 日

以军突袭哈马斯多哈据点引发地区震荡,特朗普罕见公开批评内塔尼亚胡

2025 年 9 月 10 日

市场监管总局已约谈主要外卖平台,抵制恶性补贴

2025 年 9 月 10 日
锂电「反内卷」显成效?六氟磷酸锂涨价潮袭来 业内:厂商前期主动降负荷

锂电 「反内卷」 显成效?六氟磷酸锂涨价潮袭来 业内:厂商前期主动降负荷

2025 年 9 月 10 日
黄金交易提醒:金价历史新高后上演「过山车」,这是见顶了吗?关注美国通胀数据

黄金交易提醒:金价历史新高后上演 「过山车」,这是见顶了吗?关注美国通胀数据

2025 年 9 月 10 日

史上最贵 iPhone 诞生!苹果 iPhone 17 系列正式发布 :Pro Max 顶配 2TB 版本售价高达 17999 元

2025 年 9 月 10 日
凌晨!苹果重大发布!iPhone 17搭载A19芯片 史上最薄款国行版起售价7999元!

凌晨!苹果重大发布!iPhone 17 搭载 A19 芯片 史上最薄款国行版起售价 7999 元!

2025 年 9 月 10 日
券商调研与评级同步发力 偏好红利、科技 白酒股难入法眼

券商调研与评级同步发力 偏好红利、科技 白酒股难入法眼

2025 年 9 月 10 日
金桂财经

2025 年 9 月
一 二 三 四 五 六 日
1234567
891011121314
15161718192021
22232425262728
2930  
« 8 月    

近期动态

  • 国家统计局:8 月 CPI 同比下降 0.4% PPI 同比下降 2.9%
  • 四维透视化工产业 「金九银十」 成色
  • 行业反内卷深化促长期重构,石化 ETF(159731) 短期调整迎低位布局机会
  • 以军突袭哈马斯多哈据点引发地区震荡,特朗普罕见公开批评内塔尼亚胡
  • 市场监管总局已约谈主要外卖平台,抵制恶性补贴
  • 锂电 「反内卷」 显成效?六氟磷酸锂涨价潮袭来 业内:厂商前期主动降负荷
广告

Copyright © 2025 广州金桂广告传媒有限公司. 粤 ICP 备 2025390655 号

  • 关于本站
  • 联系我们
  • 隐私政策
没有结果
查看所有结果
  • 登录& 注册

Copyright © 2025 广州金桂广告传媒有限公司. 粤 ICP 备 2025390655 号

  • 登录
  • 注册
忘记密码?
Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }