Risposte:
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.
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.
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);
const {PORT = 3000} = process.env
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