Ich teste eine App aus (hoffentlich läuft sie auf Heroku, habe aber auch Probleme vor Ort). Es gibt mir einen EACCES-Fehler, wenn es http.Server.listen () ausführt - aber es tritt nur an einigen Ports auf.
Also, lokal laufe ich:
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)
Auf Port 900 (oder einem der anderen 20 Ports, die ich ausprobiert habe) läuft nichts, daher sollte dies funktionieren. Das seltsame ist , dass es tut Arbeit an einigen Häfen. Zum Beispiel funktioniert Port 3000 perfekt.
Was würde das verursachen?
Update 1:
Ich habe herausgefunden, dass auf meinem lokalen Computer der EACCES-Fehler auftritt, weil ich den Knoten als Root ausführen muss, um an diese bestimmten Ports zu binden. Ich weiß nicht, warum das passiert, aber mit sudo wird es behoben. Dies erklärt jedoch nicht, wie ich es auf Heroku beheben würde. Es gibt keine Möglichkeit, als Root auf Heroku zu laufen. Wie kann ich also Port 80 abhören?