узел js throw er; // Ошибка Unhandled 'error' Ошибка: прослушать EACCES [duplicate]

Используйте команду JOIN , чтобы связать ваши таблицы с oneantother.

Кроме того, я рекомендовал бы этот учебник by Keith Brown.

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

11 ответов

Выполнение на вашей рабочей станции

Как правило, процессы, выполняющиеся без привилегий root, не могут связываться с портами ниже 1024.

Так что попробуйте более высокий порт или запустите с повышенными привилегиями с помощью sudo. Вы можете понизить привилегии после того, как вы привязались к нижнему порту, используя process.setgid и process.setuid .

Выполняется на heroku

При запуске ваших приложений на heroku вы должны использовать порт, как указано в переменной окружения PORT.

См. http://devcenter.heroku.com/articles/node-js

var server = require('http').createServer();
var port = process.env.PORT || 3000;

server.listen(port, function() {
  console.log('Listening on ' + port);
});
284
ответ дан Alex Choroshin 16 August 2018 в 01:39
поделиться
  • 1
    Означает ли это, что я должен использовать порт, предоставленный Heroku, и затем они сделают какую-то магию за кулисами, чтобы перенести это на порт 80? Что делать, если я хочу запустить что-то не на порт 80? – jwegner 6 February 2012 в 21:57
  • 2
    Да. Вы можете слушать только порт, который мы вам скажем, на $ PORT. Мы заботимся о маршрутизации 80 или 443 в ваш порт. Фактический порт все время меняется, когда мы перемещаем ваш динамик. На данный момент мы поддерживаем только публичную маршрутизацию от 80 до 443. – Will 7 February 2012 в 00:21
  • 3
    @Will, любой шанс этого ограничения лифтинга? В частности, возможность прослушивать порты, отличные от 80 или 443? Это довольно строгий набор, все рассмотрено. – ghayes 18 September 2012 в 02:04
  • 4
    Почему вы хотите, чтобы ваше приложение работало на другом порту, чем на http и https? – Will 18 September 2012 в 18:19
  • 5
    @ Хотелось бы разместить простой игровой сервер на Heroku. Unity необходимо перенести crossdomain.xml через порт 843. – polkovnikov.ph 29 July 2014 в 13:55

Это означает, что узел не может прослушивать определенный порт. Измените его на 1234 или 2000 или 3000 и перезапустите сервер.

3
ответ дан Bo Persson 16 August 2018 в 01:39
поделиться

OMG !! В моем случае я делал ....listen(ip, port) вместо ...listen(port, ip), и это вызывало ошибку msg: Error: listen EACCES localhost

Я использовал номера портов> = 3000 и даже пытался с доступом администратора. Ничего не получилось. Затем, с более близким переосмыслением, я заметил проблему. Изменил его на ...listen(port, ip), и все начало работать нормально !!

Просто назовите это в случае, если это полезно кому-то другому ...

1
ответ дан Dilip Muthukurussimana 16 August 2018 в 01:39
поделиться
  • 1
    Спасибо! У меня такая же проблема. Я привык ко всем другим API, использующим имя хоста, порт. – David 27 November 2017 в 03:03

Попробуйте authbind:

http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html

После установки , вы можете добавить файл с именем номера порта, который вы хотите использовать, в следующей папке: / etc / authbind / byport /

Дайте ему 500 разрешений с помощью chmod и измените право собственности на пользователя, которого вы хотите запустить программу под.

После этого выполните «authbind node ...» в качестве этого пользователя в вашем проекте.

1
ответ дан DraughtGlobe 16 August 2018 в 01:39
поделиться

Другой подход заключается в перенаправлении портов:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 900 -j REDIRECT --to-port 3000

И запустите ваш сервер на> 1024 портах:

require('http').createServer().listen(3000);

ps то же самое можно сделать для https (443 ) порт между прочим.

4
ответ дан eleven 16 August 2018 в 01:39
поделиться

это происходит, если порт, который вы пытаетесь локально размещать, является portfowarded

1
ответ дан Jasper Smith 16 August 2018 в 01:39
поделиться

Я получил эту ошибку на своем mac, потому что он запускал сервер Apache по умолчанию, используя тот же порт, что и тот, который используется сервером узлов, который в моем случае был портом 80. Все, что мне нужно было сделать, это остановить его с помощью sudo apachectl stop

Надеюсь, это кому-то поможет.

1
ответ дан mabounassif 16 August 2018 в 01:39
поделиться

Помните, если вы используете sudo для привязки к порту 80 и используете переменные env PORT & amp; NODE_ENV вы должны повторно экспортировать эти вары, поскольку теперь вы находитесь под корневым профилем, а не с вашим профилем пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:

sudo su
export NODE_ENV=production
export PORT=80
docpad run
1
ответ дан PA. 16 August 2018 в 01:39
поделиться

Проверьте эту ссылку :

Предоставьте безопасное разрешение пользователя для использования порта 80

Помните, что мы НЕ хотим запускать ваши приложения как пользователь root, но есть заминка: у вашего безопасного пользователя нет разрешения использовать HTTP-порт по умолчанию (80). Вы хотите опубликовать веб-сайт, который посетители могут использовать, перейдя на простой в использовании URL-адрес, например http://ip:port/

. К сожалению, если вы не входите в систему под root, вам обычно придется использовать URL как http://ip:port - номер порта> 1024.

Многие люди застревают здесь, но решение легко. Там несколько вариантов, но это тот, который мне нравится. Введите следующие команды:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

Теперь, когда вы указываете приложение узла, которое вы хотите запустить на порт 80, оно не будет жаловаться.

73
ответ дан ruffin 16 August 2018 в 01:39
поделиться

Непривилегированный пользователь (не root) не может открыть прослушивающий сокет на портах ниже 1024.

152
ответ дан user1303768 16 August 2018 в 01:39
поделиться
  • 1
    Upvoted - это хорошее общее правило, но есть исключения из этого, например, «возможности» в Linux. – mikemaccana 28 May 2012 в 09:30
  • 2
    Вы просто спасли мне часы отладки. Я не знал об этом. – Malharhak 23 January 2013 в 05:03
  • 3
    Мне не нравится это, хотя, я не хочу, чтобы sudo при запуске экспресс-сервера с помощью узла (собственно, gulp). Так не имеет смысла – blamb 6 December 2015 в 08:55
  • 4
    эта мудрость – mauris 12 August 2016 в 02:34
  • 5
    @blamb Затем используйте решение MeetMehta ; ^) – ruffin 11 November 2016 в 15:36

Я тоже получил эту ошибку на моем mac. Я использую «npm run dev» для запуска приложения nodejs в окнах, и он отлично работает. но я получил эту ошибку на моей mac-ошибке: Error: bind EACCES null: 80 mac.

решение № 1: «Отдайте корневой доступ и запустите его (что обычно). используйте 'sudo npm run dev' и вам нужно ввести пароль, это работает для меня. надеюсь, что это может помочь!

ссылка: Ошибка Node.js EACCES при прослушивании на порту http 80 (разрешение отклонено)

1
ответ дан ZILONG PAN 16 August 2018 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: