Ошибка EACCES в Node.js при прослушивании на большинстве портов

Я тестирую приложение (надеюсь, оно будет работать на 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 работает отлично.

Что могло вызвать это?

Обновление 1:

Я понял, что на моем локальном компьютере возникает ошибка EACCES, потому что мне нужно запустить узел как root, чтобы выполнить привязку к этим определенным портам. Я не знаю, почему это происходит, но использование sudo исправляет это. Однако это не объясняет, как я бы это исправил на Heroku. На Heroku невозможно запустить от имени root, так как я могу прослушивать порт 80?

230
задан jwegner 6 February 2012 в 07:13
поделиться