Qu'est-ce que process.env.PORT dans Node.js?

175

à quoi process.env.PORT || 3000sert Node.js? J'ai vu ça quelque part:

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

S'il est utilisé 3000comme port d'écoute, puis-je l'utiliser à la place?

app.listen(3000);

Sinon pourquoi?

utilisateurs
la source

Réponses:

237

Dans de nombreux environnements (par exemple Heroku), et par convention, vous pouvez définir la variable d'environnement PORTpour indiquer à votre serveur Web sur quel port écouter.

Cela process.env.PORT || 3000signifie donc : tout ce qui se trouve dans la variable d'environnement PORT, ou 3000 s'il n'y a rien.

Donc, vous passez cela app.listen, ou à app.set('port', ...), et cela permet à votre serveur d'accepter un paramètre de l'environnement sur quel port écouter.

Si vous passez 3000à codé en dur app.listen(), vous êtes toujours à l'écoute sur le port 3000, ce qui peut être juste pour vous, ou non, en fonction de vos besoins et des exigences de l'environnement dans lequel vous exécutez votre serveur.

Nitzan secoué
la source
74
  • si vous exécutez node index.js, Node utilisera3000

  • Si vous exécutez PORT=4444 node index.js, Node utilisera process.env.PORTce qui équivaut à 4444dans cet exemple. Exécutez avec sudopour les ports inférieurs à 1024.

Abdennour TOUMI
la source
13
Si vous utilisez ceci dans la machine Windows, vous devrez d'abord définir la variable PORT comme "set PORT = 3300", puis dans la commande suivante, si vous exécutez node server.js, il prendra le port comme 3300 au lieu de 3000 .
Aakash Jain
35

Lors de l'hébergement de votre application sur un autre service (comme Heroku, Nodejitsu et AWS), votre hôte peut configurer indépendamment la process.env.PORTvariable pour vous; après tout, votre script s'exécute dans leur environnement.

C'est ce que fait Elastic Beanstalk d'Amazon. Si vous essayez de définir une valeur de port statique comme 3000au lieu de process.env.PORT || 3000où 3000 est votre paramètre statique, votre application entraînera une erreur de passerelle 500 car Amazon configure le port pour vous.

Il s'agit d'une application Express minimale qui se déploiera sur Elastic Beanstalk d'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);
ThisClark
la source
1
Dans Node.js prenant en charge ES6, vous pouvez écrire encore plus court:const {PORT = 3000} = process.env
Julian
1
@PENNSYLVANIE. pas de PA, si process.env.port est trouvé dans l'environnement de production, le port en obtiendra la valeur. N'oubliez pas que cette opération sera lue de gauche à droite et s'arrêtera à la première valeur disponible le cas échéant.
HoCo_
11

Dans certains scénarios, portne peut être désigné que par l'environnement et est enregistré dans une variable d'environnement utilisateur. Voici comment les applications node.js fonctionnent avec.

L' processobjet est un global qui fournit des informations sur le processus Node.js actuel et le contrôle sur celui-ci. En tant que global, il est toujours disponible pour les applications Node.js sans utiliser require().

La process.envpropriété renvoie un objet contenant l'environnement utilisateur.

Un exemple de cet objet ressemble à:

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

Par exemple,

terminal : définir une nouvelle variable d'environnement utilisateur, pas de manière permanente

export MY_TEST_PORT=9999

app.js : lire la nouvelle variable d'environnement depuis l'application de nœud

console.log(process.env.MY_TEST_PORT)

terminal : exécutez l'application de nœud et obtenez la valeur

$ node app.js
9999
champ
la source