Je teste une application (j'espère qu'elle fonctionne sur Heroku, mais j'ai aussi des problèmes localement). Cela me donne une erreur EACCES lorsqu'il exécute http.Server.listen () - mais cela ne se produit que sur certains ports.
Donc, localement, je cours:
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 en cours d'exécution sur le port 900 (ou l'un des 20 autres ports que j'ai essayés), donc cela devrait fonctionner. La partie étrange est qu'il fait le travail sur certains ports. Par exemple, le port 3000 fonctionne parfaitement.
Qu'est-ce qui provoquerait cela?
Mise à jour 1:
J'ai compris que sur mon ordinateur local, l'erreur EACCES venait car je dois exécuter le nœud 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 corrige. Cependant, cela n'explique pas comment je le corrigerais sur Heroku. Il n'y a aucun moyen de s'exécuter en tant que root sur Heroku, alors comment puis-je écouter sur le port 80?