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?

0voto

Aori Nevo Punkte 71

Übergeben Sie den Wert von $PORT aus dem Heroku-Bash-Prozess an Ihre Node-App mithilfe eines Optionsparsers wie yargs.

Hier ist ein Beispiel dafür, wie Sie das tun können. Fügen Sie dem Skriptobjekt in package.json eine Startmethode "node server --port $PORT" hinzu.

Verwenden Sie in Ihrer Serverdatei yargs, um den Wert der Port-Option (--port $PORT) der Startmethode zu erhalten:

const argv = require('yargs').argv;
const app = require('express')();

const port = argv.port || 8081;

app.listen(argv.port, ()=>{
    console.log('Probably listening to heroku $PORT now ', argv.port); // unless $PORT is undefined, in which case you're listening to 8081.
});

Wenn Ihre Anwendung nun startet, bindet sie sich an den dynamisch festgelegten Wert von $PORT.

0voto

Codedreamer Punkte 1289

Bei allen Lösungen, die ich versucht habe, keine Arbeit wie erwartet, ich studieren heroku standardmäßig die .env-Datei sollte die Konvention PORT, die process.env.PORT, heroku standardmäßig wird für das Schlüsselwort PORT suchen pflegen.

Heben Sie jegliche Umbenennung wie APP_PORT= auf und verwenden Sie stattdessen PORT= in Ihrer env-Datei.

0voto

Aminu Kano Punkte 1999

Eine feste Nummer kann für den Port nicht festgelegt werden, heroku weist ihn dynamisch zu mit process.env.PORT . Sie können aber auch beide hinzufügen, etwa so process.env.PORT || 5000 . Heroku verwendet den ersten und Ihr Localhost den zweiten.

Sie können sogar Ihre Rückruffunktion hinzufügen. Sehen Sie sich den folgenden Code an

app.listen(process.env.PORT || 5000, function() {
    console.log("Server started.......");
});

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