Подтвердить что ты не робот

Прослушивать ошибку EADDRNOTAVAIL в Node.js

Я установил Nginx и Node.js на моем сервере.

Когда я пытаюсь запустить мой файл Node.js, я получаю сообщение об ошибке:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:614:11)
    at Array.0 (net.js:689:28)
    at EventEmitter._tickCallback (node.js:192:40)

Как я могу исправить эту проблему?

Спасибо!

4b9b3361

Ответ 1

У меня была эта проблема, и я думал, что это проблема портов, но она оказалась проблемой IP.

У меня была переменная окружения HOST, указывающая на статический IP-адрес, и мой сервер Node прослушивал этот адрес. В какой-то момент, когда мой маршрутизатор переработал, он начал присваивать моей машине новый IP-адрес, и я начал получать сообщение об ошибке. Это было исправлено путем изменения адреса, который прослушивал мой сервер.

Моя конфигурация:

app.set('port', process.env.PORT || 3000);
app.set('host', process.env.HOST || '0.0.0.0');

http.createServer(app).listen(app.get('port'), app.get('host'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

Убедитесь, что ваш хост поражает вашу машину. В любом случае, loopback, как предложил @miltonb, всегда должен работать:

app.set('host', '127.0.0.1');

Ответ 2

Я получал ту же ошибку, а затем я сменил порт и работал

Ответ 3

Я думаю, вам нужно немного больше контекста, как некоторые из вашего кода. Я предполагаю, что вы начинаете слушать веб-сервер или сокет? Основываясь на этом предположении, я получаю что-то подобное, когда я запускаю базовый веб-сервер на своем тестовом сервере, если я не запускаю локальный хост.

events.js:48
        throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:670:11)
    at Array.0 (net.js:756:28)
    at EventEmitter._tickCallback (node.js:190:38)

Попробуйте изменить параметр [hostname] на localhost:

var http = require('http');
http.createServer( function ).listen(8000, '127.0.0.1');

Ответ 4

Может ли быть, что node уже запускал сервер? Я получил аналогичную ошибку и нашел это при устранении неполадок. Завершение работы предыдущего сервера node решило мою проблему.

Ответ 5

В большинстве случаев это будет IP-адрес или имя хоста. Причина в том, что node js принимает это как ключевой элемент для запуска сервера. если есть конфликт или неверный IP-адрес, он записывается с этой ошибкой

Ошибка: прослушивание EADDRNOTAVAIL

надеюсь, что это поможет.

Ответ 6

Для меня у меня была такая же ошибка, и когда я проверяю свою конфигурацию, я обнаружил, что host=127.0.0.0, которая вызывает ошибку, потому что она должна быть 127.0.0.1 вместо 127.0.0.0

Ответ 7

Для меня проблема была в том, что IP, который я написал, просто не существует :) обычно дома у меня IP 192.168.xx, и после перезапуска у меня был другой адрес... когда я пытался gulp serve мое приложение - у него был конфиг со старым IP....

как всегда, будет работать 127.0.0.1, но когда вы хотите проверить свой сайт с другими устройствами, вы хотите использовать внешний IP 192.168.xx... или аналогичный.

Ответ 8

var express = require('express');

var app = express();
app.set('port', process.env.PORT || 3000);
app.set('host', process.env.HOST || 'localhost');

app.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('host') + ':' + app.get('port'));
});

работает для меня.
он также является общим для отладки localhost и вашего локального ip без каких-либо изменений.

Ответ 9

Это также произойдет, когда "ip addr add i: p: v: 6" все еще находится в подвешенном состоянии или что-то в этом роде (просто выполняется /ing), а интерфейс, как я полагаю, не полностью готов к прослушиванию и все еще занят добавлением нового адреса ipv6.

Использование execSync [см. Https://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options] для вызова 'sleep' для 2-секундной паузы, по-видимому, позволяет прослушивать не ошибку с ошибкой: прослушать EADDRNOTAVAIL.

[Это действительно ошибка, я думаю, в NodeJS 7.4.0 в Ubuntu, потому что этого не происходит с созданием адреса ipv4 в момент перед использованием/прослушиванием соединения.]

Ответ 10

Проверьте свой IP-адрес ipconfig и добавьте любой порт 3004, например. Код ниже, наконец, работает для меня. В случае, если вы хотите получить доступ к этому серверу с другого устройства в вашей сети. Или просто установите для локального IP-адреса узла 127.0.0.1 и получите доступ с вашего устройства.

var server = require('http').createServer(app);
server.listen(3004, '192.168.x.x', function () {
  console.log("Listening on port 3000!");
});

Ответ 11

В моем случае я исправил это, проверив каталог /tasks/options

Я нашел файл connect.js со статическим IP-адресом, который был неверным. Я просто изменил его на правильный, и это сработало.