Почему я не могу слушать на локальном хосте, но могу ли я слушать на 127.0.0.1?

Мне сложно понять, почему в node.js работает следующая строка кода:

server.listen(12345, "127.0.0.1"); // works

но этого нет:

server.listen(12345, "localhost"); // fails

Кодирование localhost буквально приводит к следующей ошибке:

events.js:45
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: ECONNREFUSED, Could not contact DNS servers
    at IOWatcher.callback (dns.js:74:15)

Я не понимаю, почему он должен «связываться с DNS-серверами», поскольку это localhost, как определено в моем HOSTS файле (я использую node.js под Windows).

Почему жесткое кодирование localhost не работает?


person pimvdb    schedule 24.07.2011    source источник
comment
Вы проверили свой файл hosts, чтобы убедиться, что сопоставление localhost не было перезаписано? Что произойдет, если вы пропингуетесь с локальным хостом из командной строки?   -  person shanethehat    schedule 24.07.2011
comment
@shanethehat: Это прекрасно работает; у моего веб-сервера http://localhost/ тоже нет проблем.   -  person pimvdb    schedule 24.07.2011
comment
Вы пробовали использовать http: // localhost (в противном случае добавляется пробел, поскольку комментарий изменяется)? Я спрашиваю, потому что вы сказали, что попробовали localhost, а затем попробовали с http в браузере. Если вы просто наберете localhost в браузере, браузер окажет вам услугу и автоматически добавит http: // в начало.   -  person rf43    schedule 24.07.2011
comment
@DDoSAttack: Спасибо, но не повезло. http://localhost не работает; http://127.0.0.1 тоже не работает, только ровно 127.0.0.1.   -  person pimvdb    schedule 24.07.2011


Ответы (3)


Вы используете сборку cygwin? Вы пробовали 'Настроить разрешение доменного имени ( DNS) ':

Cygwin внутренне использует Windows для DNS-запросов. node.js использует библиотеку c-ares, которая полагается на /etc/resolv.conf. Cygwin поставляется с пустым /etc/resolv.conf. Чтобы включить сеть из ваших скриптов, добавьте эти IP-адреса в файл (Google Public DNS):

$ vim /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4
person Andrey Sidorov    schedule 24.07.2011
comment
Я не делал этого, но где мне сохранить файл /etc/resolv.conf в Windows? - person pimvdb; 24.07.2011
comment
'/' обычно является установочным каталогом cygwin, т. е. если у вас установлен cygwin в c:\cygwin, то resolv.conf это c:\cygwin\etc\resolv.conf - person Andrey Sidorov; 26.07.2011

Оказалось, что проблема заключалась в использовании сборки cygwin.

Я просмотрел http://nodejs.org/ и обнаружил, что только недавно был доступен собственный двоичный файл Windows, который работает как шарм.

person pimvdb    schedule 26.07.2011

Я никогда лично не использовал node.js, но быстрый поиск дал интересные результаты ...

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

Если мне что-то не хватает о том, как работает node.js, мне очень жаль.

person rf43    schedule 24.07.2011