Risposte:
In molti ambienti (ad es. Heroku) e come convenzione, puoi impostare la variabile d'ambiente PORT
per dire al tuo server web su quale porta ascoltare.
Quindi process.env.PORT || 3000
significa: 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 3000
a 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.PORT
quale è uguale a 4444
in questo esempio. Eseguire con sudo
per 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.PORT
variabile 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 3000
posto di process.env.PORT || 3000
dove 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, port
può 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' process
oggetto è 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.env
proprietà 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