Я тестирую приложение (надеюсь запустить на 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?
источник
Ответы:
Запуск на вашей рабочей станции
Как правило, процессы, выполняющиеся без привилегий root, не могут привязываться к портам ниже 1024.
Поэтому попробуйте порт более высокого уровня или запустите с повышенными привилегиями через
sudo
. Вы можете понизить привилегии после привязки к низкому порту, используяprocess.setgid
иprocess.setuid
.Бег на героку
При запуске ваших приложений на heroku вы должны использовать порт, указанный в переменной окружения PORT.
Смотрите http://devcenter.heroku.com/articles/node-js
источник
crossdomain.xml
через 843 порт.Непривилегированный пользователь (не root) не может открыть прослушивающий сокет на портах ниже 1024.
источник
sudo
при запуске экспресс-сервера с использованием узла (на самом деле глоток). Так что не имеет смыслаПроверьте эту ссылку ссылку :
источник
pm2 kill
его заново.Другой подход заключается в перенаправлении портов:
И запустите ваш сервер на> 1024 порту:
ps, кстати, то же самое можно сделать для порта https (443).
источник
Это означает, что узел не может прослушивать определенный порт. Измените его на что-то вроде 1234 или 2000 или 3000 и перезагрузите сервер.
источник
О, МОЙ БОГ!! В моем случае я делал
....listen(ip, port)
вместо,...listen(port, ip)
и это выдает ошибку msg:Error: listen EACCES localhost
Я использовал номера портов> = 3000 и даже пытался с правами администратора. Ничего не получилось. Затем, при ближайшем рассмотрении, я заметил проблему. Изменил это на
...listen(port, ip)
все и все заработало нормально !!Просто вызывать это в случае, если это полезно для кого-то еще ...
источник
....listen(ip, port)
в своем ответе (с четырьмя.
)? Мне потребовалась минута, чтобы понять, что из-за этого вы говорили о порядке аргументов.....
(четыре точки) там, что я думал, было очевидно.Я получил эту ошибку на моем Mac, потому что он по умолчанию запускал сервер apache, используя тот же порт, который использовался сервером узлов, в моем случае это был порт 80. Все, что мне нужно было сделать, это остановить его
sudo apachectl stop
Надеюсь, это кому-нибудь поможет.
источник
Я тоже получил эту ошибку на своем Mac. Я использую
npm run dev
для запуска моего приложения Nodejs в Windows, и он работает нормально. Но я получил эту ошибку на моем Mac -error given was: Error: bind EACCES null:80
.Один из способов решить эту проблему - запустить его с правами root. Вы можете использовать
sudo npm run dev
и вам нужно будет ввести свой пароль.Как правило, предпочтительнее обслуживать ваше приложение через непривилегированный порт, например 3000, который будет работать без прав root.
ссылка: Node.js EACCES ошибка при прослушивании через порт http 80 (разрешение отклонено)
источник
У меня была похожая проблема, что он отказывался работать на порте 8080, но также любой другой.
Оказывается, это потому, что
env.local
файл, который он читал, содержал комментарии после имен переменных вроде:И он интерпретировал это так, пытаясь использовать порт "
8080 # The port the server runs at
", который, очевидно, является недопустимым портом (-1). Удаление комментариев полностью решило проблему.Кстати, используя Windows 10 и Git Bash.
Я знаю, что это не совсем описанная здесь проблема, но это может помочь кому-то там. Я приземлился на этот вопрос в поисках проблемы для моего ответа, так что ... может быть?
источник
Помните, что если вы используете sudo для привязки к порту 80 и используете переменные env PORT & NODE_ENV, вы должны повторно экспортировать эти переменные, так как вы сейчас находитесь в корневом профиле, а не в своем профиле пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:
источник
это происходит, если порт, на котором вы пытаетесь разместить локально, настроен на порт
источник
Попробуйте authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
После установки вы можете добавить файл с именем номера порта, который вы хотите использовать, в следующую папку: / etc / authbind / byport /
Дайте ему 500 разрешений с помощью chmod и измените владельца на пользователя, под которым вы хотите запустить программу.
После этого выполните «authbind node ...» в качестве этого пользователя в вашем проекте.
источник
Моя ошибка была исправлена путем изменения номера порта в server.js, особенно в этой строке
Я изменил свой номер порта на 8085 с 8080.
Надеюсь, поможет.
источник
Попробовав много разных способов, переустановка IIS на мои окна решила проблему.
источник
Моя ошибка устранена с помощью (В Windows)
Разрешить приложению NodeJS доступ к сети в брандмауэре Windows.
источник
перезагрузки не хватило! Единственный способ решить эту проблему заключается в следующем:
Вы должны убить службу, которая работает в этом порту.
в cmd, запустите от имени администратора, затем введите: netstat -aon | найти / я "слушаю"
затем вы получите список с активной службой, найдите порт, работающий на 4200, и используйте идентификатор процесса, который является последним столбцом для его уничтожения
: taskkill / F / PID 2652
источник