Estou testando um aplicativo (espero executar no heroku, mas também estou tendo problemas localmente). Ele está me dando um erro EACCES quando executa http.Server.listen () - mas ocorre apenas em algumas portas.
Então, localmente, estou executando:
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)
Não tenho nada em execução na porta 900 (ou em nenhuma das outras 20 portas que tentei), portanto, isso deve funcionar. A parte estranha é que ele faz o trabalho em alguns portos. Por exemplo, a porta 3000 funciona perfeitamente.
O que causaria isso?
Atualização 1:
Eu descobri que no meu computador local, o erro EACCES está chegando, porque eu tenho que executar o nó como root para ligar a determinadas portas. Não sei por que isso acontece, mas o uso do sudo o corrige. No entanto, isso não explica como eu o consertaria no Heroku. Não há como rodar como root no Heroku, então como posso ouvir na porta 80?