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?

4voto

user3711307 Points 41

Juste une note pour les utilisateurs de Mac OS X et Linux:

Si vous voulez exécuter votre application Node / Express sur un numéro de port inférieur à 1024, vous devez exécuter en tant que superutilisateur: sudo PORT=80 node app.js

3 votes

Une meilleure option pour exécuter votre application sur un port inférieur à 1024 est de rediriger un port avec un numéro plus grand. Utiliser sudo pour pouvoir accéder à un numéro de port inférieur à 1024 est généralement considéré comme une mauvaise pratique.

4voto

user1276682 Points 51

Dans la dernière version du code avec express-generator (4.13.1) app.js est un module exporté et le serveur est démarré dans /bin/www en utilisant app.set('port', process.env.PORT || 3001) dans app.js sera remplacé par une déclaration similaire dans bin/www. J'ai simplement modifié la déclaration dans bin/www.

2voto

user2855232 Points 21

Remarqué que cela n'a jamais été résolu... Vous avez probablement un pare-feu devant votre machine bloquant ces ports, ou iptables est configuré pour empêcher l'utilisation de ces ports.

Essayez d'exécuter nmap -F localhost lorsque vous exécutez votre application (installez nmap si vous ne l'avez pas). Si cela semble que vous exécutez l'application sur le port correct et que vous ne pouvez pas y accéder via un navigateur distant, alors il y a probablement un middleware ou un pare-feu physique qui bloque le port.

J'espère que cela aidera!

0 votes

C'est ce qui a fonctionné pour moi. J'ai oublié d'autoriser le port.

2voto

demil133 Points 455

La ligne que vous avez trouvée cherche simplement la variable environnementale PORT, si elle est définie, elle l'utilise, sinon elle utilise le port par défaut 3000. Vous devez d'abord définir cette variable environnementale (pas besoin d'être root)

export PORT=8080
node

2voto

MEAbid Points 373

Si vous voulez afficher quelque chose sur lequel vous êtes connecté sur 3000

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Exemple d'application écoutant sur le port 3000!')
})

J'espère que cela vous sera utile

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