当web端口80已被使用时,如何在heroku上的任何端口上监听?

时间:2017-05-12 19:08:46

标签: javascript node.js meteor heroku port

我是heroku的新手,我在heroku上部署了meteorjs应用程序。我的Meteorjs应用程序是一个web应用程序,所以在构建完成后它在端口80上的heroku上运行。但同时我也想听一个端口例如:4000或任何以便我可以捕获我的任何第三方发起的webhook事件我想听。在我的本地机器上,它运行在一个端口上运行的webapp和另一个运行的监听器上运行完美,但是在我部署了它之后只运行了webapp并且监听器不听。任何人都可以帮助我或指导我。任何新的解决方案也欢迎..

在我的server / main.js中我创建了一个facebook-bot-messenger的bot实例,下面是启动监听器的代码

bot.listen(4000);

在我的client / main.html中,我有html代码,这只是hello world

在我访问http://localhost:3000时在本地计算机上我可以看到helloworld和app也正在侦听端口4000.

当我访问https://appname.herokuapp.com时,我会看到helokuorld。在这种情况下,端口是80,这很好,但机器人没有收听,因为我在端口4000上的https://appname.heroku.com上发出的任何帖子呼叫都没有响应。

1 个答案:

答案 0 :(得分:10)

Heroku为您分配端口,因此您无法设置自己的端口。您必须从PORT环境变量中读取端口号。在Node中,这将是process.env.PORT

您也可以使用||作为和OR。例如,在下面的例子中,它将在Heroku上读取环境变量的端口号,但在本地它将默认为端口4000

const app = express();
app.set('port', (process.env.PORT || 4000));

//Start Server
app.listen(app.get('port'), function() {
  console.log('Node app is running on port', app.get('port'));
});