Heroku cedar堆栈上的Node.js端口问题

18

我在Node.js中运行一个基本的Express应用程序,并尝试部署到Heroku。该应用在本地工作正常,我认为我在Heroku上的设置一直顺利进行,直到启动服务器时出现以下错误:

2011-09-21T16:42:36+00:00 heroku[web.1]: State changed from created to starting
2011-09-21T16:42:39+00:00 app[web.1]: Express server listening on port 3000 in production mode
2011-09-21T16:42:40+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 3000, should be 12810 (see environment variable PORT)
2011-09-21T16:42:40+00:00 heroku[web.1]: Stopping process with SIGKILL
2011-09-21T16:42:40+00:00 heroku[web.1]: Process exited

目前这是我在 app.js 中所拥有的全部代码。

app.listen(3000);

我也按照Heroku入门指南中提到的方式运行了这个程序。

$ heroku config:add NODE_ENV=production
Adding config vars:
NODE_ENV => production

我相信我只需要为生产设置端口?谢谢。

1个回答

74

您可以展示一下调用listen的整个代码部分吗?您应该检查进程环境变量PORT,而不是将其硬编码为3000。根据Heroku的文档

var port = process.env.PORT || 3000;
app.listen(port, function() {

很好,我更新了帖子。我需要以某种方式切换到端口12810进行生产吗?谢谢。 - tuddy
1
好的,试着按照我上面展示的逻辑调用listen函数,看看是否有效。 - Femi
这个可以运行,但是 process.env.PORT 是什么意思?谁设置它的? - Alexis
Heroku会在启动Web Dyno时注入配置变量,这是它们注入的变量之一。 - Femi
我在环境变量中找不到PORT变量,需要在Procfile -p命令中提及它。我该怎么做? - rupinderjeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接