Je teste une application (en espérant qu'elle fonctionne sur Heroku, mais j'ai aussi des problèmes localement). Il me donne une erreur EACCES quand il exécute http.Server.listen() - mais il se produit seulement sur certains ports.
Donc, localement, je suis en train de courir :
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
at Server._doListen (net.js:1062:5)
at net.js:1033:14
at Object.lookup (dns.js:132:45)
at Server.listen (net.js:1027:20)
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
Je n'ai rien qui fonctionne sur le port 900 (ni sur aucun des 20 autres ports que j'ai essayés), donc cela devrait fonctionner. Ce qui est bizarre, c'est qu'il fait fonctionnent sur certains ports. Par exemple, le port 3000 fonctionne parfaitement.
Quelle en serait la cause ?
Mise à jour 1 :
J'ai compris que sur mon ordinateur local, l'erreur EACCES vient du fait que je dois exécuter node en tant que Root afin de me lier à ces certains ports. Je ne sais pas pourquoi cela se produit, mais l'utilisation de sudo le résout. Cependant, cela n'explique pas comment je pourrais le corriger sur Heroku. Il n'y a aucun moyen de fonctionner en tant que Root sur Heroku, alors comment puis-je écouter sur le port 80 ?
27 votes
Les ports inférieurs à 1024 requièrent traditionnellement des autorisations élevées. Sur Heroku, vous n'écoutez pas le port 80, vous écoutez le port qu'ils vous indiquent via les variables d'environnement, et laissez leur couche de routage gérer la liaison du port 80 sur le bord.
0 votes
Votre mise à jour 1 m'a aidé. 'sudo node myporgram.js' l'a fait fonctionner.