Heroku 上的快速网关 - {$PORT} 绑定错误

express-gateway on Heroku - {$PORT} binding error

我已经在 Heroku 上部署了我的 express-gateway,在 gateway.config.yml 文件中以这种方式使用环境变量:

http:
  port: ${PORT:-8080}
  host: ${HOST:-localhost} 
https:
  port: ${PORT:-8080}
  host: ${HOST:-localhost}   
apiEndpoints:
  ....

无论如何,Heroku 一直报错:

[EG:gateway] gateway http server listening on :::8080

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

我根据official documentation使用了符号${ENV_VAR_NAME:-DEFAULT}。为什么 Heroku 尝试绑定 8080?

======更新

只是一个题外话的提示,对于谁将要使用 Heroku,这是我如何从环境变量中获取 redis url。

      var redis_Url = process.env.REDIS_URL;
      var groups = /^redis:\/\/(.*?)\:(.+?)\@(.+?)\:(.+)$/gi.exec(redis_Url); 
      
      var nm = groups[1];
      var pasw = groups[2];
      var host = groups[3];
      var port = groups[4];
    
      process.env.REDIS_NM   = nm;
      process.env.REDIS_PASW = pasw;
      process.env.REDIS_HOST = host;
      process.env.REDIS_PORT = port;
      
      console.log('redis url   --> '+process.env.REDIS_URL);
      console.log('nm   --> '+process.env.REDIS_NM);
      console.log('pasw --> '+process.env.REDIS_PASW);
      console.log('host --> '+process.env.REDIS_HOST);
      console.log('port --> '+process.env.REDIS_PORT);

你不应该在同一个端口上同时监听 http 和 https 服务器,否则它会失败。

Heroku 提供了自己的路由器来为您处理 SSL 终止,因此您可以删除整个 https 部分。