Я тестирую приложение (надеюсь, оно будет работать на heroku, но у меня также возникают проблемы локально). Это дает мне ошибку EACCES при запуске http.Server.listen (), но это происходит только на некоторых портах.
Итак, локально я выполняю:
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)
У меня ничего не работает на порту 900 (или на любом из других 20 портов, которые я пробовал), так что это должно сработать. Странно то, что он действительно работает на некоторых портах. Например, порт 3000 работает отлично.
Что могло вызвать это?
Я понял, что на моем локальном компьютере возникает ошибка EACCES, потому что мне нужно запустить узел как root, чтобы выполнить привязку к этим определенным портам. Я не знаю, почему это происходит, но использование sudo исправляет это. Однако это не объясняет, как я бы это исправил на Heroku. На Heroku невозможно запустить от имени root, так как я могу прослушивать порт 80?