讲师中心 微信公众号
AI工具推荐 视频效率加速

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

阿敏君_5091

阿敏君_5091

发布时间:2026-08-15 20:29:24

|

363人浏览过

|

来源于php中文网

原创

如何在 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 管理)

✅ 关键动作:

Orderly Sdk React Hooks
Orderly Sdk React Hooks

Orderly React SDK 钩子使用参考指南,包括 useOrderEntry、usePositionStream、useOrderbookStream、useCollateral 等。

下载
  • 将原 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 服务。解决方案:

方案 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 接口协作——这才是可扩展、易调试、团队友好的正确姿势。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

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

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

2203

2023.08.11

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

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

5850

2024.03.19

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

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

5146

2024.03.19

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

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

4386

2023.06.20

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

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

1109

2023.07.04

js四舍五入
js四舍五入

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

4304

2023.07.04

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

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

880

2023.09.01

JavaScript转义字符
JavaScript转义字符

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

1756

2023.09.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

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

精品课程

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

共58课时 | 12万人学习

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

共12课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn