关于node.js:如何在Heroku中正确设置节点应用程序端口号

How to properly set the node app port number in Heroku

我知道Heroku会自动为您的实例分配一个端口号,并且在您定义一个特定的端口(例如" 3000")时不起作用。但是,当我尝试更改端口号以使用环境变量时(如Heroku文档中所建议的以及一些堆栈溢出答案),我总是得到

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

该应用程序在本地可完美运行,我想知道如何最好地更改我的代码以确保其在Heroku上可运行:

1
2
3
4
5
6
7
8
9
10
11
var express     = require('express'),
    app         = express(),
    server      = require('http').createServer(app),
    io          = require('socket.io').listen(server),
    port        = 3000,

    // hash object to save clients data,
    // { socketid: { clientid, nickname }, socketid: { ... } }
    chatClients = new Object();

server.listen(port);

以下是一些我尝试过的内容的链接,例如:

https://devcenter.heroku.com/articles/preparing-a-codebase-for-heroku-deployment(第4点)

Heroku node.js错误(Web进程在启动后60秒内未能绑定到$ PORT)

https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error


只需从环境变量访问PORT,如下所示:

1
2
3
4
5
6
7
8
9
10
11
var express     = require('express'),
    app         = express(),
    server      = require('http').createServer(app),
    io          = require('socket.io').listen(server),
    port        = process.env.PORT || 3000,

    // hash object to save clients data,
    // { socketid: { clientid, nickname }, socketid: { ... } }
    chatClients = new Object();

server.listen(port);