Node.js在Windows上无法解析'localhost'

6
以下代码会在Windows下的node.js中引发异常:
var Socket = require("net").Socket;

socket = new Socket();
socket.connect(80, "localhost");

这里是信息:

    events.js:2083: Uncaught Error: getHostByName ENOTFOUND

当我删除localhost时,它可以正常工作。可能是什么原因呢? 我试过关闭防火墙,但是没有效果。

可能是Mongoose无法在没有互联网的情况下连接的重复问题。 - Yaacov
3个回答

9
Node.js使用c-ares解析器,完全忽略系统解析器。因此关于C:\WINDOWS\system32\drivers\etc\hosts的建议可能是不相关的。
c-ares库读取某些系统配置文件,例如在Windows和Cygwin上它会读取/etc/resolv.conf。因此您应该检查它是否读取/etc/hosts或C:\WINDOWS\system32\drivers\etc\hosts。如果它没有并且没有本地主机的内置支持,则必须使用127.0.0.1。

自从在Windows上使用Node.js不再需要Cygwin,这种情况还存在吗? - Brad
1
这并不是因为 Cygwin,而是由于与 Cygwin 无关的设计更改:请参见 http://nodejs.org/api/dns.html。基本上 net.connect 已经被更改为使用系统解析器而非 c-ares。 - nponeccop

4
在我的情况下,添加Microsoft Loopback Adapter解决了这个问题。
  1. 点击开始菜单。在搜索框中输入hdwwiz,然后点击hdwwize.exe程序链接。
  2. 现在应该打开“添加硬件向导”。
  3. 向下滚动列表并选择“网络适配器”,然后点击“下一步”。
  4. 给下一个窗口一点时间来加载,然后点击“Microsoft”并选择“Microsoft Loopback Adapter”。
来自:http://www.groovypost.com/howto/microsoft/install-a-loopback-adapter-in-windows-7/

-2

选项1:不要使用Windows ;)

选项2: 在C:\WINDOWS\system32\drivers\etc\hosts中添加:

 127.0.0.1       localhost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接