Was ist process.env.PORT in Node.js?

175

Wofür wird process.env.PORT || 3000in Node.js verwendet? Ich habe das irgendwo gesehen:

 app.set('port', process.env.PORT || 3000);

Kann 3000ich dies stattdessen verwenden, wenn es als Überwachungsport verwendet wird?

app.listen(3000);

Wenn nicht warum?

Benutzer-S
quelle

Antworten:

237

In vielen Umgebungen (z. B. Heroku) und als Konvention können Sie die Umgebungsvariable festlegen PORT, um Ihrem Webserver mitzuteilen, welchen Port er abhören soll.

Also process.env.PORT || 3000bedeutet: was auch immer in der Umgebungsvariablen PORT ist, oder 3000, wenn dort nichts ist.

Wenn Sie das app.listenoder an übergeben app.set('port', ...), kann Ihr Server einen Parameter aus der Umgebung akzeptieren, auf welchen Port Sie warten sollen.

Wenn Sie 3000fest codiert übergeben app.listen(), lauschen Sie immer auf Port 3000, der je nach Ihren Anforderungen und den Anforderungen der Umgebung, in der Sie Ihren Server ausführen, möglicherweise nur für Sie bestimmt ist oder nicht.

Nitzan schüttelte sich
quelle
74
  • Wenn Sie ausführen node index.js, wird Node verwendet3000

  • Wenn Sie ausführen PORT=4444 node index.js, verwendet Node, process.env.PORTwas 4444in diesem Beispiel gleich ist. Führen Sie mit sudofür Ports unter 1024 aus.

Abdennour TOUMI
quelle
13
Wenn Sie dies in einem Windows-Computer verwenden, müssen Sie zuerst die PORT-Variable als "set PORT = 3300" festlegen. Wenn Sie dann im nächsten Befehl den Knoten server.js ausführen, wird der Port als 3300 anstelle von 3000 verwendet .
Aakash Jain
35

Wenn Sie Ihre Anwendung auf einem anderen Dienst (wie Heroku, Nodejitsu und AWS) hosten, kann Ihr Host die process.env.PORTVariable unabhängig für Sie konfigurieren . Schließlich läuft Ihr Skript in ihrer Umgebung.

Amazon Elastic Beanstalk macht das. Wenn Sie versuchen, einen statischen Portwert festzulegen, z. B. 3000anstelle von process.env.PORT || 30003000 als statische Einstellung, führt Ihre Anwendung zu einem 500-Gateway-Fehler, da Amazon den Port für Sie konfiguriert.

Dies ist eine minimale Express-Anwendung, die auf Amazon Elastic Beanstalk bereitgestellt wird:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

// use port 3000 unless there exists a preconfigured port
var port = process.env.port || 3000;

app.listen(port);
ThisClark
quelle
1
Innerhalb von Node.js, das ES6 unterstützt, können Sie noch kürzer schreiben:const {PORT = 3000} = process.env
Julian
1
@PA. Keine PA, wenn process.env.port in der Produktionsumgebung gefunden wird, sodass port den Wert davon erhält. Denken Sie daran, dass dieser Vorgang von links nach rechts gelesen wird und bei dem ersten verfügbaren Wert stoppt, falls vorhanden.
HoCo_
11

In einigen Szenarien portkann nur von der Umgebung festgelegt werden und wird in einer Benutzerumgebungsvariablen gespeichert. Im Folgenden erfahren Sie, wie die Apps von node.js damit arbeiten.

Das processObjekt ist ein globales Objekt, das Informationen zum aktuellen Node.js-Prozess und dessen Kontrolle bereitstellt. Als globales Programm steht es Node.js Anwendungen immer ohne Verwendung zur Verfügung require().

Die process.envEigenschaft gibt ein Objekt zurück, das die Benutzerumgebung enthält.

Ein Beispiel für dieses Objekt sieht folgendermaßen aus:

{
  TERM: 'xterm-256color',
  SHELL: '/usr/local/bin/bash',
  USER: 'maciej',
  PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/maciej',
  EDITOR: 'vim',
  SHLVL: '1',
  HOME: '/Users/maciej',
  LOGNAME: 'maciej',
  _: '/usr/local/bin/node'
}

Beispielsweise,

Terminal : Legen Sie eine neue Benutzerumgebungsvariable fest, nicht dauerhaft

export MY_TEST_PORT=9999

app.js : Liest die neue Umgebungsvariable aus der Knoten-App

console.log(process.env.MY_TEST_PORT)

Terminal : Führen Sie die Knoten-App aus und rufen Sie den Wert ab

$ node app.js
9999
Themenfeld
quelle