Faire écouter Node.js sur le bon port
Une application Node.js qui affiche « en ligne » côté processus peut rester injoignable si elle écoute sur le mauvais port ou sur la mauvaise interface. Sur l'hébergement d'applications, le port public est attribué par la plateforme : votre code doit le lire dans l'environnement et écouter sur toutes les interfaces, jamais sur un numéro codé en dur.
Lire le port fourni
La plateforme expose le port dans la variable PORT. Lisez-la au démarrage, convertissez-la en nombre et écoutez sur 0.0.0.0 :
const http = require('http');
const port = Number(process.env.PORT || 3000);
if (!Number.isInteger(port) || port <= 0) {
console.error('PORT invalide');
process.exit(1);
}
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('ok');
});
server.listen(port, '0.0.0.0', () => {
console.log(`écoute sur le port ${port}`);
});0.0.0.0 signifie « toutes les interfaces IPv4 ». Avec 127.0.0.1, le processus n'accepte que les connexions locales : le proxy de la plateforme ne peut pas l'atteindre. Sur Linux, :: écoute en IPv6 et accepte souvent aussi IPv4 en mode double pile, mais 0.0.0.0 reste le choix explicite pour ce type d'hébergement.
Erreurs fréquentes
| Symptôme | Cause probable | Correctif |
|---|---|---|
EADDRINUSE |
Deux processus sur le même port | Arrêter l'ancien, redémarrer proprement |
EACCES |
Port inférieur à 1024 | Utiliser le port fourni |
| Service « en ligne » mais injoignable | Écoute sur 127.0.0.1 |
Écouter sur 0.0.0.0 |
ERR_SOCKET_BAD_PORT |
PORT absent ou non numérique |
Valider au démarrage, échouer clairement |
| Redémarrages en boucle | Exception avant listen |
Lire la première erreur du journal |
Un EADDRINUSE sur l'hébergement géré indique souvent un second listen() dans le code, ou une ancienne instance encore active. Sur un VPS, vous pouvez identifier le propriétaire avec ss -ltnp | grep :3000 (adaptez le numéro) ; les droits root sont alors nécessaires pour voir tous les processus.
Ne pas coder le port en dur
Le port peut changer si le service est recréé ou si l'allocation est modifiée. Un listen(3000) fonctionne en local et échoue le jour du redéploiement, ce qui rend l'incident difficile à relier à la configuration. Utilisez la même variable pour les URL internes que votre application génère, par exemple un lien de réinitialisation de mot de passe.
Ne faites pas confiance à un port fourni par le client dans une requête : un utilisateur ne doit pas pouvoir rediriger votre serveur vers une autre interface. Le port d'écoute vient de l'environnement, pas d'un en-tête HTTP.
Vérifier
- Redémarrez le service et cherchez la ligne d'écoute dans la console.
- Testez l'URL ou l'allocation indiquée par le panneau, pas
localhostdepuis votre machine. - Envoyez une requête simple et vérifiez le code HTTP :
curl -i http://ADRESSE_FOURNIE:PORT/- Si le processus tourne mais que la requête échoue, vérifiez d'abord l'interface d'écoute, ensuite le routage de la plateforme, puis seulement votre logique applicative.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Configurer le fichier principal Node.jsDéfinir le point d'entrée exécuté par la plateforme et corriger les erreurs de chemin.
- Lire les logs d'une application Node.jsLire stdout et stderr dans la console, repérer une boucle de redémarrage et journaliser sans fuite.
- Comprendre package.json et npmLes champs utiles du manifeste, la différence entre dépendances et outils de développement, et quand utiliser npm install ou npm ci.