113 votes

L'application Node.js/Express.js ne fonctionne que sur le port 3000

J'ai une application Node.js/Express.js exécutée sur mon serveur qui ne fonctionne que sur le port 3000 et j'essaie de comprendre pourquoi. Voici ce que j'ai trouvé :

  • Sans spécifier de port (app.listen()), l'application s'exécute mais la page web ne se charge pas.
  • Sur le port 3001 (app.listen(3001)) ou tout autre port qui n'est pas utilisé, l'application s'exécute mais la page web ne se charge pas.
  • Sur le port 2999, l'application lance une erreur car autre chose utilise ce port.
  • Sur le port 3000, l'application s'exécute et la page web se charge correctement.

Je sais que les applications Express sont configurées par défaut sur le port 3000. Mais étrangement, mon application ne fonctionne que lorsque je la lance explicitement sur le port 3000 (app.listen(3000)).

J'ai trouvé ceci à la ligne 220 de /usr/bin/express :

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

Cela fait comme précédemment mentionné : définir le port sur ce qui est spécifié ou sur 3000 s'il n'y a rien de spécifié.

Comment pourrais-je faire fonctionner mon application sur un port différent comme 8080 ou 3001 ?

Merci !

Modification : Exemple de Code (Application Node/Express très simple)

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

app.get('/', function(req, res){
    res.send('hello world'); 
});

// Ne fonctionne que sur 3000 quel que soit le port environnemental défini ou la façon dont je définis [valeur] dans app.set('port', [valeur]).
app.listen(3000);

0 votes

1) Un port est requis par .listen(), donc vous ne devriez pas essayer de vous en passer. 2) Rencontrez-vous des erreurs lorsque vous exécutez l'application? Ou semble-t-elle tout simplement inaccessible depuis un navigateur? 3) Essayez-vous d'accéder au site sur le même machine avec localhost:3000, localhost:3001, etc.? Si vous utilisez deux machines, un client et un serveur, vous devrez ajouter des exceptions au pare-feu sur le serveur pour permettre à Node de recevoir des requêtes du client.

0 votes

Comment lancez-vous l'application ?

0 votes

Y a-t-il une chance que vous puissiez mettre en ligne une version épurée/sanitisée dans un gist?

2voto

Réponse selon la version actuelle d'express

Si vous parlez de la version actuelle d'express, si vous exécutez app.listen() pour démarrer l'écoute sans spécifier de port, Express choisira un port aléatoire pour votre application, pour connaître sur quel port elle fonctionne actuellement utilisez

app.listen(0, () => {
    console.log(app.address().port)
}

devrait afficher le port de votre app. De plus, le premier paramètre 0 peut être totalement ignoré mais n'est pas recommandé

2voto

Mark Longmire Points 327

Dans app.js, ajoutez simplement...

process.env.PORT=2999;

Cela isolera la variable PORT à l'application express.

1voto

William Li Points 40

Je suis en train d'utiliser le paquet minimist et les arguments de démarrage de node pour contrôler le port.

node server.js --port 4000

ou

node server.js -p 4000

À l'intérieur de server.js, le port peut être déterminé par

var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Écoute sur le port ${port}...`)

//....listen(port);

et cela se retrouve par défaut à 3000 si aucun port n'est passé en argument.

Vous pouvez ensuite utiliser écouter sur la variable port.

0 votes

Un simple trait d'union -p n'a pas fonctionné pour moi. Mais deux traits d'union --p fonctionnent. Merci pour cette réponse.

0voto

Assurez-vous que vous exécutez à partir du dossier de votre application où se trouve le fichier package.json.

0voto

huckbit Points 496

Je pense que la meilleure façon est d'utiliser le package dotenv et de définir le port dans le fichier de configuration .env sans modifier le fichier www à l'intérieur du dossier bin.

Il suffit d'installer le package avec la commande :

npm install dotenv

l'importer dans votre application :

require('dotenv').config()

Créez un fichier .env dans le répertoire racine de votre projet, et ajoutez le port dedans (par exemple) pour écouter sur le port 5000

PORT=5000

et c'est tout.

Plus d'informations ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X