Che cos'è process.env.PORT in Node.js?


175

a cosa process.env.PORT || 3000serve Node.js? L'ho visto da qualche parte:

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

Se è usato per impostare 3000come porta di ascolto, posso usare questo invece?

app.listen(3000);

Se no perché?

Risposte:


237

In molti ambienti (ad es. Heroku) e come convenzione, puoi impostare la variabile d'ambiente PORTper dire al tuo server web su quale porta ascoltare.

Quindi process.env.PORT || 3000significa: qualunque cosa sia nella variabile d'ambiente PORT, o 3000 se non c'è nulla lì.

Quindi passi quello app.listen, o a app.set('port', ...), e ciò rende il tuo server in grado di accettare un parametro dall'ambiente su quale porta ascoltare.

Se passi 3000a codice hard app.listen(), stai sempre ascoltando sulla porta 3000, che potrebbe essere solo per te o no, a seconda delle tue esigenze e dei requisiti dell'ambiente in cui stai eseguendo il tuo server.


74
  • se corri node index.js, Node utilizzerà3000

  • Se esegui PORT=4444 node index.js, Node utilizzerà process.env.PORTquale è uguale a 4444in questo esempio. Eseguire con sudoper porte inferiori a 1024.


13
Se lo stai usando nel computer Windows, prima devi impostare la variabile PORT come "set PORT = 3300", quindi nel comando successivo, se esegui node server.js, prenderà la porta come 3300 anziché 3000 .
Aakash Jain

35

Quando si ospita l'applicazione su un altro servizio (come Heroku, Nodejitsu e AWS), l'host può configurare autonomamente la process.env.PORTvariabile per te; dopo tutto, il tuo script viene eseguito nel loro ambiente.

Amazon's Elastic Beanstalk fa questo. Se provi a impostare un valore di porta statica come al 3000posto di process.env.PORT || 3000dove 3000 è l'impostazione statica, l'applicazione genererà un errore 500 gateway poiché Amazon sta configurando la porta per te.

Questa è un'applicazione Express minima che verrà distribuita su Elastic Beanstalk di Amazon:

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

1
All'interno di Node.js che supporta ES6 puoi scrivere ancora più breve:const {PORT = 3000} = process.env
Julian

1
@PAPÀ. nessuna PA, se process.env.port viene trovato nell'ambiente di produzione, quindi la porta ne otterrà il valore. Ricorda che questa operazione verrà letta da sinistra a destra e si fermerà al primo valore disponibile se presente.
HoCo_

11

In alcuni scenari, portpuò essere designato solo dall'ambiente e viene salvato in una variabile di ambiente dell'utente. Di seguito è spiegato come funzionano le app node.js.

L' processoggetto è un globale che fornisce informazioni e controllo sul processo Node.js corrente. Come globale, è sempre disponibile per le applicazioni Node.js senza usare require().

La process.envproprietà restituisce un oggetto contenente l'ambiente utente.

Un esempio di questo oggetto è simile a:

{
  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'
}

Per esempio,

terminale : imposta una nuova variabile di ambiente utente, non in modo permanente

export MY_TEST_PORT=9999

app.js : legge la nuova variabile di ambiente dall'app nodo

console.log(process.env.MY_TEST_PORT)

terminal : esegui l'app nodo e ottieni il valore

$ node app.js
9999
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.