【问题标题】:Heroku process.env.port is undefinedHeroku process.env.port 未定义
【发布时间】:2016-12-30 00:51:22
【问题描述】:

我正在尝试在 heroku 上运行 node.js 应用程序。我让它在本地工作,但是当我在 heroku 上部署它时,出现以下错误:

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

这是我尝试监听的端口:

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

当我记录 process.env.port 是什么时,它说 process.env.port 未定义。

我需要做些什么来自动设置端口吗?

编辑(修复): 所以我发现问题出在哪里。 javascript 正在被缩小,但 process.env.port 被缩小为不起作用的东西。感谢您的帮助。

【问题讨论】:

  • 我觉得应该是process.env.PORT
  • @Зелёный:我用大写的 PORT 试了一下,没有任何改变。
  • 所以看起来$PORT 变量没有定义。
  • @Зелёный:是的,这就是问题所在,但我不知道如何定义。
  • 我的老问题,但因为它有一些观点,我应该解释发生了什么。我当时运行的 gulp 或 webpack 意外地剥离了一些变量。所以@Зелёный 说的是正确的方法。

标签: javascript node.js heroku


【解决方案1】:

您应该在 heroku 上运行服务器之前传递配置参数。在终端类型中

$ heroku config:set PORT=3333

那么你就可以得到这样的端口号

const PORT = process.env.PORT || 3000;

如果你是从终端分配的

 console.log(PORT) => 3333

否则

console.log(PORT) => 3000

【讨论】:

  • 不,要使用 process.env.PORT 你应该自己定义它,如果它是自动定义的,没有理由使用 ||运算符,因为 process.env.PORT 永远不会是假的
  • 我已经按照你说的做了,现在我有一个配置变量 3333。当我登录 process.env.PORT 时,我仍然得到“未定义”的东西我忘记了吗?
  • $ heroku 配置。运行此命令,它将显示分配的所有变量。如果没有 PORT: 3333 那么你拼错了一些东西。请查看 heroku 文档,然后设置您的服务器 devcenter.heroku.com/articles/…
  • 配置变量 NPM_CONFIG_PRODUCTION: false PORT: 3333 这些是配置变量
  • 我的老问题,但因为它有一些观点,我应该解释发生了什么。我当时运行的 gulp 或 webpack 意外地剥离了一些变量。所以@donquixote 说的是正确的方法。
【解决方案2】:

如果你正在使用 babel,请不要在 Heroku 中使用 babel 插件 babel-plugin-transform-inline-environment-variables。 我认为 Heroku 在部署时没有设置 PORT 变量,所以这就是为什么你会得到 undefined。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,并找到了将 heroku dyno 端口变量传递给节点启动脚本的解决方案。

    如果您在项目的根目录中创建了 Procfile,只需打开它。

    如果您还没有创建 Procfile,只需转到项目的根目录并创建一个名为“Procfile”的文件。该文件没有扩展名,它有助于 heroku 获取应用程序的起点。更多详情:The Procfile

    Node.JS Heroku documentation 中没有提供任何示例应该如何看起来像 Procfile。

    就我而言,我使用的是 Typescript,我的 .js 文件输出目录位于项目文件夹的 /build 目录中。我假设你也有同样的情况。如果没有,只需将您的启动文件的目录。

    过程文件:

    web: PORT=$PORT node ./build/index.js
    

    【讨论】:

    • 我想我也有同样的问题。但是,我在我的项目根目录中添加了一个 procfile,在带有您指定的内容的 package.json 文件旁边 - 但指向我的主要捆绑 js 文件 (dist/main.bundle.js)。这仍然不起作用 - 当我在我的 main.(ts)js 中记录 process.env 时,我只是得到`Process Env:{}`
    【解决方案4】:

    任何人都可以访问该帖子。 首先检查您是否正确编写process.env.PORT。 我正在写.Port,我花了 4 个小时才找出错误

    【讨论】:

    • 我花了一整天的时间试图找出问题所在...大写的 PORT 并修复。谢谢!!
    【解决方案5】:

    只是想把这个留给像我这样困惑的人,你必须使用

    process.env.PORT

    不是

    process.env.$PORT

    【讨论】:

    • 请将其添加到评论中。
    • 我没有足够的代表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多