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

Node.js+Express部署Heroku时手动上传SSL证书失败求助

解决Heroku添加SSL证书时的ENOENT错误及代码配置问题

看起来你遇到了两个核心问题:一是执行heroku certs:add时找不到证书文件,二是服务器代码的HTTPS配置不符合Heroku的部署规范。我来一步步帮你理清:

1. 解决ENOENT文件找不到错误

这个错误明确说明终端在指定路径下找不到server.crt和server.key,你可以从这几个方向排查:

  • 检查文件是否存在:确认C:\Users\user\Desktop\2\sportwiz\backend目录下真的有这两个文件吗?你的服务器代码里用的是./secrets/key.pem和./secrets/cert.pem,是不是你把证书存在了secrets子文件夹里,却在命令里用了根目录的文件名?
  • 确认终端工作目录:执行heroku certs:add时,你的终端当前是不是在backend文件夹下?如果不是,要么用cd命令切换到该目录,要么在命令里使用文件的完整绝对路径,比如:
    heroku certs:add C:\Users\user\Desktop\2\sportwiz\backend\secrets\cert.pem C:\Users\user\Desktop\2\sportwiz\backend\secrets\key.pem
    
  • 文件名是否匹配:如果你的证书是.pem格式,Heroku同样支持,不需要强制改成.crt/.key,直接用你已有的文件路径即可。

2. 修正服务器代码的HTTPS配置

这里有个关键的误区:Heroku上部署应用不需要手动创建HTTPS服务器。Heroku的路由器会自动处理SSL终止——所有HTTPS请求会被Heroku的服务器解密,然后以HTTP的形式转发给你的应用。所以你代码里的HTTPS配置不仅多余,还可能导致部署后无法正常访问。

你需要修改代码如下:

  • 移除https和fs的引入(如果没有其他地方用到的话)
  • 替换HTTPS服务器创建代码为普通的HTTP监听
  • 优化session的secure配置,生产环境下启用

修改后的核心代码片段:

const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
const session = require('express-session')
var history=require('connect-history-api-fallback')
const addPredictRoutes = require('./routes/predictRoute')
const addUserRoutes = require('./routes/userRoute')

const app = express()

// 其他中间件配置保持不变...
app.use(cors({ origin: ['https://localhost:8080'], credentials: true }));
app.use(bodyParser.json({limit: '50mb'}))
app.use(cookieParser());
// 根据环境设置secure cookie
app.use(session({ 
  secret: 'lalala', 
  resave: false, 
  saveUninitialized: true, 
  cookie: { 
    secure: process.env.NODE_ENV === 'production' 
  } 
}))
app.use(history())
app.use(express.static('public'));

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

// 替换HTTPS服务器为普通HTTP监听
app.listen(port, function(){
  console.log("Express server listening on port " + port);
});

// 路由和其他代码保持不变...
app.get('/', (req, res) => {
  res.send('Hello World!')
})
addPredictRoutes(app)
addUserRoutes(app)

3. 后续操作步骤

  1. 把修改后的代码提交并部署到Heroku
  2. 确保你使用正确的证书文件路径执行heroku certs:add命令
  3. 部署完成后,可以用heroku certs命令查看证书是否成功添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:03:33