650 Stimmen

Heroku + node.js Fehler (Webprozess konnte sich nicht innerhalb von 60 Sekunden nach dem Start an $PORT binden)

Ich habe meine erste node.js app (läuft gut lokal) - aber ich bin nicht in der Lage, es über heroku bereitstellen (zum ersten Mal w / heroku als gut). Der Code ist unten. SO lässt mich nicht so viel Code zu schreiben, so würde ich nur sagen, dass die Ausführung des Codes lokal als auch in meinem Netzwerk zeigt kein Problem.

 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/');

Irgendeine Idee?

2voto

Ruslan Valeev Punkte 983

Ich habe viele Stunden damit verbracht, die Ursache zu finden, und schließlich habe ich herausgefunden, dass diese Zeitüberschreitung (60s) eingestellt werden kann. Hier können Sie von 60 Sekunden auf 120 Sekunden oder sogar mehr wechseln. Es funktioniert für mich, ich hoffe, es hilft allen anderen!

2voto

Coder Gautam YT Punkte 554

Verwenden Sie process.env.PORT || 3000 für Ihren Hafen.

Dabei wird der Port von Heroku verwendet, wenn er verfügbar ist, oder der Port 3000, wenn er nicht verfügbar ist (z. B. bei lokalen Tests).

Sie können 3000 in eine beliebige Zahl ändern, z. B. 8080

2voto

MR X Punkte 21

Befolgen Sie diese vier einfachen Schritte, um dieses Problem zu lösen: in der Datei package.json:

1- Setzen Sie das Hauptfeld auf die Serverdatei:

"main": "server.js" // <-- here set you server file

2- Fügen Sie der Funktion app.listen den Parameter host hinzu

const port = process.env.PORT || 3000;
const host = '0.0.0.0'
app.listen(port, host, ()=> connsole.log(`server is running on port ${port}`)

3- Fügen Sie das Postinstall-Skript zur Datei package.json hinzu

"scripts": {
     "postinstall": "npm run build", // <-- add this line
     "start": "node server.js" // <-- change server.js to you main file
}

4- Fügen Sie das Feld engines in die Datei package.json ein

"engines": {
   "node": ">=14.0.O", // <-- change it to your node version. you can "node -v" in you command line
   "npm": ">=7.7.0" // <-- change this to your npm version. you can use "npm -v" in the command line to get your npm version
}

Lassen Sie mich wissen, ob Sie damit Erfolg haben!

1voto

Suman Das Punkte 11

Während der Entwicklung der Anwendung müssen wir den PORT wie folgt definieren:

const port = process.env.PORT || 4000; // PORT must be in caps

Fügen Sie beim Bereitstellen der Anwendung auf dem Server die folgende Methode hinzu:

app.listen(port, () => {
 console.info("Server started listening.");
});

Wir können den Hostnamen als zweiten Parameter übergeben, wenn wir ihn lokal ausführen. Bei der Bereitstellung auf dem Server sollte der Parameter hostname jedoch entfernt werden.

app.listen(port, hostName, () => {
  console.info(`Server listening at http://${hostName}:${port}`);
});

1voto

Xiaofan Guo Punkte 43

Ich habe das gleiche Problem, aber meine Umgebungsvariablen sind gut gesetzt und die Version von npm und node ist in package.json angegeben. Ich habe herausgefunden, dass es daran liegt, dass Heroku in meinem Fall Folgendes benötigt "Start" angegeben werden in paket.json :

  "scripts": {
    "start": "node index.js"
  }

Nachdem ich dies zu meiner package.json hinzugefügt habe, wird meine Node-App erfolgreich auf Heroku bereitgestellt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X