Heroku部署Node/React应用后,如何访问Node API端点?
折腾大半天确实让人头大,别慌,咱们一步步拆解排查:
1. 先确认你的Heroku应用公开域名
Heroku会给每个部署的应用分配一个默认域名,格式是 你的应用名.herokuapp.com。你可以:
- 登录Heroku控制台,找到你的应用,页面顶部就能看到这个域名
- 或者在本地终端运行
heroku apps:info命令,输出里的Web URL就是它
2. 检查Express后端的核心配置
端口绝对不能硬编码
Heroku会动态分配服务器端口,所以你的Express入口文件(比如server.js)必须用环境变量获取端口,不能写死成5000这类固定值:
const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server running on port ${port}`));
要是硬编码端口,Heroku会直接启动失败,API自然访问不了。
确认API路由的前缀逻辑
比如你本地开发时用localhost:5000/api/users,那部署后访问路径就是 https://你的应用名.herokuapp.com/api/users —— 不需要加端口,Heroku的反向代理会自动处理端口映射。
3. 修正React前端的API请求地址
本地开发时你可能用http://localhost:5000作为API的基础地址,但部署到Heroku后这个地址就失效了。推荐用环境判断动态适配:
// 在React的API请求工具文件里 const BASE_URL = process.env.NODE_ENV === 'production' ? window.location.origin : 'http://localhost:5000'; // 发起请求时拼接具体路由 fetch(`${BASE_URL}/api/users`) .then(res => res.json()) .then(data => console.log(data));
这样不管是本地开发还是生产环境,都能自动用对正确的API地址。
4. 查看Heroku日志找问题根源
如果还是访问失败,一定要看服务器端的日志!在终端运行:
heroku logs --tail
这个命令会实时输出应用的运行日志,你能看到服务器是否启动成功、有没有路由错误、依赖缺失等细节——这是排查Heroku部署问题的关键手段。
5. 确认package.json的配置符合要求
Heroku需要知道怎么启动你的应用,所以package.json里的脚本和引擎配置要到位:
- 必须有
start命令,比如:"scripts": { "start": "node server.js", "build": "react-scripts build" } - 最好指定Node和npm的版本,避免版本兼容坑:
"engines": { "node": "16.x", "npm": "8.x" }
最后一步:直接测试API可用性
用浏览器或者Postman直接访问https://你的应用名.herokuapp.com/api/你的路由,比如https://my-app.herokuapp.com/api/hello,看是否返回预期结果。如果返回404,检查路由是否配置正确;如果返回500,去日志里找具体错误信息。
内容的提问来源于stack exchange,提问作者Canovice

