J'ai une application Node.js / Express.js en cours d'exécution 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 sur tout autre port non utilisé, l'application s'exécute mais la page Web ne se charge pas. - Sur le port 2999, l'application renvoie une erreur car quelque chose d'autre 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 utilisent par défaut le port 3000. Mais étrangement, mon application ne fonctionne que lorsque je la fais explicitement fonctionner sur le port 3000 ( app.listen(3000)
).
J'ai trouvé ceci sur la ligne 220 de /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Ce qui fait comme indiqué précédemment: définir le port sur ce qui est spécifié ou sur 3000 si rien n'est spécifié.
Comment puis-je faire fonctionner mon application sur un autre port tel que 8080 ou 3001?
Merci!
Edit: Exemple de code (Node très simple / application Express)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Benjamin Martin
la source
la source
port
est requis par.listen()
, vous ne devriez donc pas essayer de vous en passer. 2) Avez-vous des erreurs lors de l'exécution de l'application? Ou cela semble-t-il simplement inaccessible depuis un navigateur? 3) Vous essayez d'accéder au site Web sur la même machine aveclocalhost: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 demandes du client..listen()
. Ci-dessus, quand je dis «l'application s'exécute», c'est la même chose que vous dites «aucune erreur lors de l'exécution de l'application». Quand je dis «la page Web ne se charge pas», c'est la même chose que vous dites «inaccessible depuis un navigateur». Tous les accès depuis la même machine (mon serveur). Merci pour les commentaires.$ supervisor app.js
ou$ PORT=[PORT] node app.js
lorsque je veux définir la variable de port d'environnement. Je vais mettre en place un exemple de code.Réponses:
Ce qui suit fonctionne si vous avez quelque chose comme ça dans votre app.js:
Soit vous codez explicitement votre code pour utiliser le port que vous souhaitez, comme:
Ce code signifie définir votre port sur la variable d'environnement
PORT
ou, si c'est le cas,undefined
définissez-le sur le littéral3000
.Ou utilisez votre environnement pour définir le port. Le définir via l'environnement est utilisé pour aider à délimiter entre
PRODUCTION
et deDEVELOPMENT
nombreuses plates-formes en tant que service utilisent l'environnement pour définir le port en fonction de leurs spécifications ainsi que des configurations Express internes. Ce qui suit définit une paire clé d'environnement = valeur, puis lance votre application.En référence à votre exemple de code, vous voulez quelque chose comme ceci:
la source
app.set()
code dans mon application et changé 3000 en 8080. Ne fonctionne toujours que surapp.listen(3000)
. 2. Modifiez la variable de port d'environnement sur 8080 lors de l'exécution de l'application de nœud. Ne fonctionne toujours que surapp.listen(3000)
. 3. Passé à / usr / bin / express (ligne 220) et changé 3000 en 8080. Ne fonctionne toujours que surapp.listen(3000)
. Merci pour le message informatif. Dois-je redémarrer quelque chose? Express ne peut pas être redémarré à partir de ce que je peux dire et le redémarrage de l'application Node se produit à chaque fois que j'utilisenode app.js.
node app.js
le démarrera (je l'utilise personnellementnodemon
lors du développement et des tests. Ce à quoi vous pensez peut-être est l'express
exécutable de ligne de commande qui est un processus d'aide qui construit votre squelette structure du fichier. Pouvez-vous publier un aperçu de votre code?nodemon
conjonction avecnohup
pour que mon application continue de fonctionner indéfiniment. Je n'utilise pas la version exécutable CL deexpress
, elle doit donc redémarrer chaque fois que je redémarre monnode
application. Voir mon message d'origine pour une modification avec le code. Merci!Dans
bin/www
, il y a une ligne:Essayez de le modifier.
la source
Essaye ça
la source
Essayez de localiser le bac> emplacement www et essayez de changer le numéro de port ...
la source
La manière par défaut de changer le port d'écoute sur le framework Express est de modifier le fichier nommé www dans le dossier bin.
Là, vous trouverez une ligne telle que la suivante
Changez la valeur 3000 pour n'importe quel port que vous souhaitez.
Ceci est valable pour la version 4.13.1 Express
la source
Juste une note pour les utilisateurs de Mac OS X et Linux:
Si vous souhaitez 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
la source
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 instruction similaire dans bin / www. Je viens de changer la déclaration dans bin / www.
la source
Vous avez 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). S'il semble que vous exécutez l'application sur le bon port et que vous ne pouvez pas y accéder via un navigateur distant, il y a un middleware ou un pare-feu physique qui bloque le port.
J'espère que cela t'aides!
la source
La ligne que vous avez trouvée recherche simplement la variable d'environnement
PORT
, si elle est définie, elle l'utilise, sinon utilise le port par défaut3000
. Vous devez d'abord définir cette variable d'environnement (pas besoin d'être root)la source
Si vous voulez montrer quelque chose que vous êtes connecté sur 3000
J'espère que cela vous sera utile
la source
Réponse selon la version actuelle d'Express
Si vous parlez de la version actuelle d'express , si vous exécutez
app.listen()
pour commencer à écouter sans spécifier de port, Express choisira un port aléatoire pour votre application, pour savoir quel port il est actuellement utilisédevrait sortir le port de votre
app
. De plus, ce premier paramètre0
peut être totalement ignoré mais n'est pas recommandéla source
Assurez-vous que vous exécutez à partir de ce dossier de votre application, où vous avez le package.json.
la source
J'utilise le
minimist
package et les arguments de démarrage du nœud pour contrôler le port.node server.js --port 4000
ou
node server.js -p 4000
Dans server.js, le port peut être déterminé par
et il vaut 3000 par défaut si aucun port n'est passé en argument.
Vous pouvez ensuite utiliser listen sur la
port
variable.la source
Dans app.js, ajoutez simplement ...
Cela isolera la variable PORT de l'application express.
la source
Je pense que le meilleur moyen est d'utiliser le package dotenv et de définir le port sur le
.env
fichier de configuration sans modifier le fichierwww
à l'intérieur du dossierbin
.Installez simplement le package avec la commande:
l'exiger sur votre application:
Créez un fichier .env dans le répertoire racine de votre projet et ajoutez-y le port (par exemple) pour écouter sur le port 5000
et c'est tout.
Plus d'infos ici
la source
Si vous utilisez Nodemon, je suppose que le PORT 3000 est défini dans nodemonConfig. Vérifiez si tel est le cas.
la source