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

Heroku部署React应用表单跳转本地端口问题求助

解决Heroku部署React+Node表单提交问题

你遇到的核心问题是表单action硬编码本地地址,以及前后端服务在Heroku环境下的协同配置问题。下面是具体的修改步骤,帮你解决提交跳转和端口依赖的问题:

1. 修改表单的Action路径(contact.js)

把表单的action从硬编码的http://localhost:2000/post-feedback改成相对路径/post-feedback,这样不管部署在哪里,都会自动匹配当前域名的API接口:

<form className="form-style" method="POST" action="/post-feedback" >

2. 修正Node服务的静态文件配置(db.js)

你当前的代码里有一行错误的静态文件配置,会导致资源加载混乱,需要直接删除:

// 删掉这行无效配置!
app.use(express.static(path.resolve(__dirname, "src/components/contact.js")));

这行代码试图把单个JS文件作为静态资源目录,完全没必要——你的production环境已经配置了托管src/build的静态文件,足够覆盖前端页面的访问需求。

3. 优化表单提交后的跳转逻辑(db.js)

当前用HTML脚本做跳转的方式不够优雅,还可能和React单页应用的路由冲突。建议直接用res.redirect跳转到首页,同时完善数据库操作的错误处理:

app.post("/post-feedback", function(req, res) {
  console.log("Received feedback:", req.body);
  dbConn.then(function(db) {
    delete req.body._id;
    db.collection("feedbacks").insertOne(req.body)
      .then(() => {
        // 插入成功后直接重定向到首页
        res.redirect("/");
      })
      .catch(err => {
        console.error("Insert error:", err);
        res.status(500).send("Failed to submit feedback, please try again later.");
      });
  });
});

这样用户提交后会直接回到你的React首页,避免了脚本跳转的兼容性问题。

4. 修正package.json的启动脚本

Heroku需要启动你的Node后端服务,而不是React的开发服务器。所以要修改start脚本,同时调整heroku-postbuild的路径:

"scripts": {
  "start": "node db.js", // 改为启动Node后端服务
  "dev": "react-scripts start", // 保留dev脚本用于本地开发
  "build": "react-scripts build",
  "test": "react-scripts test",
  "eject": "react-scripts eject",
  "heroku-postbuild": "npm install && npm run build" // 去掉cd src,直接在根目录执行
},

heroku-postbuild里的cd src是错误的,因为你的package.json在根目录,直接执行npm run build就会生成正确的build文件夹。

5. 本地开发的兼容处理(可选)

如果本地开发时需要同时跑React和Node服务,可以在React项目的package.json里加一行代理配置:

"proxy": "http://localhost:2000"

这样本地开发时,表单提交的/post-feedback会自动代理到localhost:2000,不需要修改代码就能在本地和Heroku上都正常运行。

做完这些修改后,重新部署到Heroku,表单就能正常提交数据到MongoDB,并且提交后自动跳转到首页了。

内容的提问来源于stack exchange,提问作者Gokul Rajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:19