J'ai une application Node.js/Express.js s'exécutant sur mon serveur qui ne fonctionne que sur le port 3000 et j'essaie de comprendre pourquoi. Voici ce que j'ai trouvé:
app.listen()
), l'application s'exécute mais la page Web ne se charge pas.app.listen(3001)
) ou sur tout autre port non utilisé, l'application s'exécute mais la page Web ne se charge pas.Je sais que les applications Express utilisent par défaut le port 3000. Mais étrangement, mon application ne s'exécute que lorsque je la fais explicitement fonctionner 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);
Ce qui se passe comme indiqué précédemment: définissez 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!
Édition: 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);
Ce qui suit fonctionne si vous avez quelque chose comme ça dans votre app.js:
http.createServer(app).listen(app.get('port'),
function(){
console.log("Express server listening on port " + app.get('port'));
});
Soit explicitement coder votre code pour utiliser le port que vous voulez, comme:
app.set('port', process.env.PORT || 3000);
Ce code signifie que vous devez définir votre port sur la variable d'environnement PORT
ou, s'il s'agit de undefined
, puis sur le littéral 3000
.
Ou utilisez votre environnement pour définir le port. Le paramétrage via l’environnement permet de délimiter PRODUCTION
et DEVELOPMENT
. De nombreuses plates-formes en tant que service utilisent l’environnement pour définir le port en fonction de leurs spécifications ainsi que de la configuration Express interne. Ce qui suit définit une paire clé d’environnement = valeur, puis lance votre application.
$ PORT=8080 node app.js
En référence à votre exemple de code, vous souhaitez quelque chose comme ceci:
var express = require("express");
var app = express();
// sets port 8080 to default or unless otherwise specified in the environment
app.set('port', process.env.PORT || 8080);
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);
app.listen(app.get('port'));
Dans bin/www
, il y a une ligne:
var port = normalizePort(process.env.PORT || '3000');
Essayez de le modifier.
Essaye ça
$ PORT=8080 node app.js
La méthode par défaut pour 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 comme celle-ci
var port = normalizePort(process.env.PORT || '3000');
Remplacez la valeur 3000 par le port de votre choix.
Ceci est valable pour Express version 4.13.1
Essayez de localiser le bac> www et essayez de changer le numéro de port ...
Dans la dernière version de code avec express-generator (4.13.1), app.js est un module exporté. Le serveur est démarré dans/bin/www à l'aide de app.set ('port', process.env.PORT || 3001). dans app.js sera remplacé par une déclaration similaire dans bin/www. Je viens de changer la déclaration dans bin/www.
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 le compte en tant que superutilisateur: Sudo PORT=80 node app.js
Si vous voulez montrer quelque chose, 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('Example app listening on port 3000!')
})
J'espère que cela vous sera utile
La ligne trouvée ne recherche que la variable d'environnement PORT
, si elle est définie, elle l'utilise, sinon 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 <your-app.js>
Si vous parlez de version actuelle de 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 sur quel port il est actuellement utilisé
app.listen(0, () => {
console.log(app.address().port)
}
devrait sortie le port de votre app
. De plus, ce premier paramètre 0
peut être totalement ignoré mais n'est pas recommandé
Remarquez 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, un middleware ou un pare-feu physique bloque le port.
J'espère que cela t'aides!
Dans app.js, ajoutez simplement ...
process.env.PORT=2999;
Cela isolera la variable PORT dans l'application express.
Si vous utilisez Nodemon, je suppose que le port 3000 est défini dans nodemonConfig. Vérifiez si c'est le cas.
Assurez-vous que vous exécutez à partir de ce dossier de votre application, où vous avez le package.json.
Je pense que le meilleur moyen est d'utiliser dotenv package et de définir le port sur le fichier de configuration .env
sans modifier le fichier www
dans le dossier bin
.
Il suffit d'installer le paquet avec la commande:
npm install dotenv
l'exiger sur votre demande:
require('dotenv').config()
Créez un fichier .env dans le répertoire racine de votre projet et ajoutez-y le port (par exemple) pour l'écouter sur le port 5000.
PORT=5000
et c'est tout.
Plus d'infos ici
J'utilise le package minimist
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
var argv = parseArgs(process.argv.slice(2))
const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)
//....listen(port);
la valeur par défaut est 3000 si aucun port n'est transmis en tant qu'argument.
Vous pouvez ensuite utiliser listen sur la variable port
.