Прослушивать ошибку 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)
Как я могу исправить эту проблему?
Спасибо!
Ответы
Ответ 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-адресом, который был неверным. Я просто изменил его на правильный, и это сработало.