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

Express部署到Heroku后带路由参数的GET请求无法访问如何解决?

故障原因
  • 最核心的问题是代码执行顺序错误:你当前的代码先调用了app.listen启动服务,之后才定义路由规则。在Heroku的Node.js生产运行环境下,服务启动后新增的路由不会被正常注册,就会出现部分路由404的问题。根路由能正常访问大概率是巧合,刚好请求进来时根路由已经完成注册,路径更深的接口还没注册完成。
  • 次要问题是express.urlencoded()中间件缺少必填配置,Express 4.16.0之后的版本要求必须显式传入extended参数,否则会触发解析异常,也可能连带影响路由匹配。
解决方法
  1. 调整代码顺序,把app.listen放到所有中间件、路由定义的最后面,同时补全urlencoded的配置,修复后代码如下:
var app = express();
app.use(cors());
app.use(express.json());
// 补全extended配置
app.use(express.urlencoded({ extended: true }));

const port = process.env.PORT || 3000;

// 先定义所有路由
app.get("/", (req, res, next) => {
  res.send("Hello")
});

app.get("/get-checkout/:contract/:nft-id", (req, res, next) => {
  res.send("checkout")
});

// 最后启动服务
app.listen(port, () => 
 console.log("Server running on port:" + port));
  1. 本地启动服务测试,访问http://localhost:3000/get-checkout/test/test确认能正常返回checkout后,再重新推送到Heroku部署。
  2. 如果部署后仍有问题,可以清除Heroku的构建缓存后重新推送,避免旧代码缓存影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03