如何在 React 项目中正确集成 Express:前后端分离的完整实践指南

阿敏君_5091

阿敏君_5091

2026-08-15

363人浏览

原创

如何在 React 项目中正确集成 Express:前后端分离的完整实践指南

react 是纯前端库,无法直接运行 express(node.js 后端框架);错误源于将服务端代码混入浏览器环境。本文将手把手教你通过目录隔离、独立进程和标准通信方式,安全、可维护地实现 react + express 协同开发。

react 是纯前端库,无法直接运行 express(node.js 后端框架);错误源于将服务端代码混入浏览器环境。本文将手把手教你通过目录隔离、独立进程和标准通信方式,安全、可维护地实现 react + express 协同开发。

你遇到的这一长串 Module not found: Error: Can't resolve 'fs'、'path'、'crypto' 等报错,并非配置疏漏,而是一个根本性架构误用:你在 React 前端应用(浏览器环境)中,试图直接 require('express')。

这是不可行的——Express 是为 Node.js 运行时设计的服务端框架,它重度依赖 fs、http、path、crypto 等 Node.js 原生模块。而现代 React 项目(无论是 CRA 还是 Vite)默认使用 Webpack 5+ 或 Vite 构建,它们明确移除了对 Node.js 核心模块的自动 polyfill 支持(出于安全与体积考量)。浏览器中根本不存在 fs.readFile() 或 http.createServer(),强行引入只会触发数十个“无法解析”错误。

✅ 正确解法不是“给浏览器加 polyfill”,而是 严格分离前后端职责:

一、项目结构:物理隔离是前提

不要在 src/App.js 或任何 React 组件里写 const express = require('express')。请重构目录如下:

my-react-express-app/
├── frontend/          # React 前端(原 create-react-app 项目)
│   ├── public/
│   ├── src/
│   ├── package.json   # "scripts": { "start": "react-scripts start" }
│   └── ...
├── backend/           # 独立 Express 后端
│   ├── server.js      # 主入口文件
│   ├── package.json   # "scripts": { "dev": "nodemon server.js", "start": "node server.js" }
│   └── ...
└── package.json       # (可选)根目录 workspace 配置(推荐用于 monorepo 管理)

✅ 关键动作:

  • 将原 create-react-app 项目整个移入 frontend/ 文件夹;
  • 在项目根目录新建 backend/,并 cd backend && npm init -y && npm install express;
  • backend/server.js 示例:
    // backend/server.js
    const express = require('express');
    const app = express();
    const PORT = 5000;

app.use(express.json()); app.get('/api/hello', (req, res) => { res.json({ message: 'Hello from Express!' }); });

app.listen(PORT, () => { console.log(✅ Backend running on http://localhost:${PORT}); });


二、启动方式:双进程并行开发

  • 前端:cd frontend && npm start → 默认启动在 http://localhost:3000
  • 后端:cd backend && npm run dev(需先 npm install -D nodemon)→ 运行在 http://localhost:5000

⚠️ 注意跨域问题:React 前端调用 fetch('/api/hello') 会默认请求 http://localhost:3000/api/hello(404),而非你的 Express 服务。解决方案:

Dagre React Flow
Dagre React Flow

使用 dagre 与 React Flow (@xyflow/react) 实现自动图布局。适用于自动布局、层级布局、树形结构或节点排列等场景。

下载

方案 A:前端代理(推荐,零配置)

在 frontend/package.json 中添加:

"proxy": "http://localhost:5000"

之后,在 React 组件中直接调用:

// frontend/src/App.js
useEffect(() => {
  fetch('/api/hello') // 自动代理到 http://localhost:5000/api/hello
    .then(res => res.json())
    .then(data => console.log(data));
}, []);

方案 B:后端启用 CORS(生产就绪)

在 backend/server.js 中安装并使用 cors:

npm install cors
const cors = require('cors');
app.use(cors()); // 允许所有源(开发用)
// 或更安全的配置:
// app.use(cors({ origin: 'http://localhost:3000' }));

三、构建与部署:前后端独立打包

  • 开发阶段:双服务并行,代理/CORS 解决通信;
  • 生产构建:
    • cd frontend && npm run build → 生成 frontend/build/ 静态文件;
    • 修改 backend/server.js,添加静态托管:
      const path = require('path');
      app.use(express.static(path.join(__dirname, '../frontend/build')));
      app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, '../frontend/build', 'index.html'));
      });
    • cd backend && npm start → Express 同时服务 API + 前端静态资源(单端口,如 :5000)

⚠️ 重要提醒:避开常见陷阱

  • ❌ 不要全局安装 express 或 create-react-app(易版本冲突);始终使用 npx create-react-app@latest 和 npm install express --save(在 backend 目录内);
  • ❌ 不要在 frontend/src/ 下安装 express、body-parser 等后端依赖;package.json 的依赖必须严格按环境划分;
  • ✅ 使用 VS Code 多根工作区(Multi-root Workspace)同时打开 frontend/ 和 backend/,提升开发效率;
  • ✅ 新手强烈建议优先选用 Vite + Express 分离模板(npm create vite@latest frontend -- --template react + 手动建 backend),比 CRA 启动更快、配置更透明。

至此,你已建立一个符合现代 Web 开发规范的全栈结构:前端专注 UI 与交互,后端专注数据与逻辑,两者通过清晰的 HTTP 接口协作——这才是可扩展、易调试、团队友好的正确姿势。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

react

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2203

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5870

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5166

10

js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4406

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1109

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

4304

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

880

4

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1776

5

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

2023.09.04

3165

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习