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

Node.js联系页后端部署Heroku遇H10崩溃及模块缺失问题求助

解决Heroku部署Firebase作品集后端的H10崩溃错误及模块找不到问题

让我们一步步拆解你遇到的问题,从日志里的关键信息入手:

1. 核心问题1:模块找不到 @sendGrid/mail

看日志里的明确报错:

Error: Cannot find module '@sendGrid/mail'

这是大小写敏感导致的坑!你本地用的是Windows系统,它对文件名/包名不区分大小写,所以本地运行没问题,但Heroku跑在Linux环境下,严格区分大小写。而实际npm包的正确名称是@sendgrid/mail(sendgrid里的g是小写),但你代码里写的是@sendGrid/mail(大写G),自然找不到模块。

修复方法:

修改App.js里的引入语句:

// 原代码
const sendGrid = require('@sendGrid/mail');
// 改为(注意g小写)
const sendGrid = require('@sendgrid/mail');

2. 核心问题2:Heroku错误启动index.js而非你的App.js

日志第一行就暴露了问题:

2020-08-30T14:49:33.088197+00:00 heroku[web.1]: Starting process with command node index.js

但你的主文件是App.js,说明Heroku没正确识别到你的启动入口。

修复方法:

  • 确认你的Procfile(首字母必须大写)内容是web: node App.js,并且已经提交到Git仓库(执行git add Procfile && git commit -m "Add Procfile")。
  • 检查你的package.json里的main字段是"App.js"、start脚本是"node App.js"——你当前的package.json配置是对的,但要确保这些修改已经推送到Heroku(执行git push heroku main)。
  • 核实你的主文件名确实是App.js(大小写完全匹配),没有误写成app.js或index.js。

3. 其他需要确认的配置

关于process.env.PORT

你已经改成app.listen(process.env.PORT || 4000);,这个设置完全正确!Heroku会动态分配端口,必须用process.env.PORT获取,本地运行时会自动 fallback到4000,无需调整。

SendGrid API密钥环境变量

你的代码里用了sendGrid.setApiKey(process.env.SENDGRID_API_KEY);,但Heroku不会自动同步本地环境变量,需要手动设置:

  • 通过Heroku CLI设置:运行heroku config:set SENDGRID_API_KEY=你的SendGrid密钥
  • 或者在Heroku Dashboard的应用「Settings」页面,找到「Config Vars」添加该变量。

最后部署验证

修改完成后,重新提交并部署:

git add .
git commit -m "Fix module case and start script"
git push heroku main

部署完成后,运行heroku logs --tail查看实时日志,确认无报错后,访问你的/api路径测试服务是否正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:12:33