You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让React前端与后端服务分别运行在不同的端口?

解决方案

之前并发启动无端口冲突提示的原因是前端进程先抢占了5000端口,后端启动失败直接退出,因此没有冲突告警,也无法响应接口请求。

1. 固定后端服务端口

优先修改后端端口避开前端框架的默认端口,直接修改server.js中的监听端口即可,示例:

// server.js 原代码
// app.listen(5000, () => console.log('服务运行在5000端口'))
// 修改为
app.listen(8000, () => console.log('服务运行在8000端口'))

你也可以自行指定其他未被占用的端口,只要和后续前端端口不重复即可。

2. 通过craco配置固定前端端口

无需使用cross-env,直接在craco.config.js中添加devServer配置指定前端端口:

// craco.config.js
module.exports = {
  // 保留你原有的tailwindcss相关配置
  devServer: {
    port: 3000 // 可自定义为其他未被占用的端口,只要不和后端端口重复即可
  }
}

3. 配置跨域代理实现接口转发

因为前后端运行在不同端口会存在跨域问题,继续在craco配置中添加代理规则,保证/api前缀的请求可以正常转发到后端:

// craco.config.js
module.exports = {
  // 其他配置保持不变
  devServer: {
    port: 3000,
    proxy: {
      '/api': {
        target: 'http://localhost:8000', // 填写你后端实际运行的地址和端口
        changeOrigin: true
        // 如果后端接口没有/api前缀,可以添加以下配置去掉请求路径的/api
        // pathRewrite: { '^/api': '' }
      }
    }
  }
}

4. 调整启动脚本

修改package.json中的启动命令,确保前后端的启动逻辑正确:

{
  "scripts": {
    "start:server": "nodemon server.js",
    "start:client": "craco start",
    "start": "concurrently \"npm run start:server\" \"npm run start:client\""
  }
}

5. 验证运行状态

  • 执行npm run start后查看concurrently的控制台输出,确认后端打印了运行在8000端口的日志、前端打印了运行在3000端口的日志
  • 直接访问http://localhost:8000/api/data验证后端接口是否正常返回,确认正常后即可通过前端地址调用接口

内容的提问来源于stack exchange,提问作者Mert Deveci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:01