【问题标题】:Heroku + node.js error (Web process failed to bind to $PORT within 60 seconds of launch)Heroku + node.js 错误(Web 进程在启动后 60 秒内无法绑定到 $PORT)
【发布时间】:2013-03-19 13:28:07
【问题描述】:

我有我的第一个 node.js 应用程序(在本地运行良好)-但我无法通过 heroku 部署它(也是第一次使用 heroku)。代码如下。所以不允许我写这么多代码,所以我只想说在本地以及在我的网络中运行代码没有问题。

 var http = require('http');
 var fs = require('fs');
 var path = require('path');

 http.createServer(function (request, response) {

    console.log('request starting for ');
    console.log(request);

    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';

    console.log(filePath);
    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
    }

    path.exists(filePath, function(exists) {

        if (exists) {
            fs.readFile(filePath, function(error, content) {
                if (error) {
                    response.writeHead(500);
                    response.end();
                }
                else {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                }
            });
        }
        else {
            response.writeHead(404);
            response.end();
        }
    });

 }).listen(5000);

 console.log('Server running at http://127.0.0.1:5000/');

有什么想法吗?

【问题讨论】:

  • 你能把你的代码贴在这里吗?如果您正在启动 http 服务器,最好是 .listen() 部分

标签: node.js heroku


【解决方案1】:

我建议您仔细阅读日志,以便轻松解决问题。 如果您将 PORT 作为环境变量 (env) 引用,请确保它是 PORT 而不是 port,因为在部署应用程序时,heroku 会自动为您的应用程序分配一个 PORT 编号。 process.env.PORT 不是process.env.port

【讨论】:

    【解决方案2】:

    我的情况是我在启动时运行数据库脚本并且需要很长时间。我通过在部署完成后手动运行npm start 解决了这个问题。

    【讨论】:

      【解决方案3】:

      这也是解决错误的好方法

        const PORT = process.env.PORT || 3000                                                   
         app.listen(                                                                                 
          PORT,                                                                                                    
          '0.0.0.0',                                                                                
          function () {                                                                                                             
          console.log("Server started.......");                                                              
          }                                                                                                                   
        );
      

      【讨论】:

        【解决方案4】:

        如果您收到此错误并且上述方法不起作用,则该错误不是来自 R10 本身。该错误是由 R14(超出内存配额)引起的,这是因为您的部分代码使用了 multer (multer. diskStorage() 方法)或其他一些库,用于使用某种形式的本地存储来存储图像或其他文件。由错误 R14 引起的延迟会导致 R10 (Boot timeout) 错误。

        解决方案:

        在您的 package.json 文件中,将您的开始更改为“start”:“node --max-old-space-size=4096 server/index.js”。这会增加存储大小。

        还有

        设置这个heroku变量 heroku canfig:set NODE_ENV=dev

        【讨论】:

          【解决方案5】:

          我浪费了一整天的时间认为后端有问题。在浏览了这里的所有解决方案并进行了彻底的日志检查后,发现问题出在前端 react App.js。

          我都改了

          Axios.post(`${process.env.REACT_APP_BASE_URL}/createOrder`, {
          
          })
          

          Axios.post(`/createOrder`, {
          
          })
          

          它成功了!

          显然 react 文件与 heroku 部署无关!

          【讨论】:

            【解决方案6】:

            对我来说,问题在于大写。你知道,经过几个小时的编码,你的眼睛会漏掉一些小细节。

            在我的代码中,我使用的是process.env.port 而不是process.env.PORT,因此请注意,PORT 环境变量必须为大写。

            请看下面的例子:

            const PORT = process.env.PORT || 3000;
            const HOST = process.env.HOST || '0.0.0.0';
            
            const express = require('express');
            const app = express();
            
            app.listen(PORT, HOST, () => {
                  console.log('Server started on ' + HOST + ':' + PORT);
            })
            

            【讨论】:

            • @RohanDevaki 我已经用正确的代码示例更新了我的答案,没有拼写错误。祝你有美好的一天!
            • 大声笑,在我回答之后?
            • @RohanDevaki 你让我用一段(无用的)代码改进我的答案,所以我做到了。您的回答没有提供我尚未提供的任何内容。
            • 它提供了,你现在让它变得相似
            • @RohanDevaki 您的回答仍然不完整,没有正确解释,并且有几个拼写错误。你会通过删除它来帮自己一个忙,接受你错了并且你试图复制我的答案。我已经标记了它,以便版主可以解决问题。在此讨论中不会再浪费一分钟。祝你有美好的一天!
            猜你喜欢
            • 2021-02-19
            • 2020-02-10
            • 1970-01-01
            • 1970-01-01
            • 2023-04-04
            • 2015-09-14
            • 2014-03-15
            • 2019-12-07
            相关资源
            最近更新 更多