2011-07-24 53 views
7

我有理解困难,为什么下面的代码行中Node.js的工作原理:为什么我不能在'localhost'上收听,但是我可以在'127.0.0.1'上收听?

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服务器',因为它的本地主机是我的HOSTS文件(我在Windows下使用node.js)。

为什么不硬编码localhost工作?

+4

你是否检查过你的hosts文件以确保localhost映射没有被覆盖?如果从命令行ping本地主机会发生什么? – shanethehat

+0

@shanethehat:这工作得很好;我的web服务器在'http:// localhost /'也没有任何问题。 – pimvdb

+0

您是否尝试使用“http:// localhost”(添加空格,否则注释会被更改)?我问,因为你说过你尝试过“localhost”,然后在浏览器中用http尝试它。如果您只是在浏览器中输入“localhost”,浏览器会为您提供帮助,并自动为您预先设置http://。 – rf43

回答

3

原来使用cygwin的构建是问题。

我看着http://nodejs.org/,我发现最近才真正的Windows二进制文件提供,它就像一个魅力。

1

我从来没有亲自使用Node.js的,然而,一些快速搜索变成了一些有趣的结果...

从我可以告诉,我看到的一切说,你需要找到IP地址你正在寻找听。这里是一个例子:Get local IP address in node.js这种行为也有道理。域名是任意的,它有时候很重要,这就是所有需要处理的东西。

如果我失去了一些东西有关如何Node.js的作品我很抱歉。

3

正在uou使用cygwin的构建?你有没有尝试'Set up Domain Name Resolution (DNS)'

Cygwin的内部使用的Windows DNS查询。 node.js使用依赖于/etc/resolv.conf的c-ares库。 Cygwin附带一个空的/etc/resolv.conf。为了从你的脚本启用网络,这些IP添加到文件(谷歌公共DNS):

$ vim /etc/resolv.conf 

nameserver 8.8.8.8 
nameserver 8.8.4.4 
+0

我没有,但我应该在Windows上保存文件'/ etc/resolv.conf'? – pimvdb

+0

'/' 是平时一般Cygwin安装目录,即如果你在安装了cygwin'C:\ cygwin'然后'resolv.conf'是'C:\ cygwin的\等\ resolv.conf' –