为什么NodeJS request()在飞行模式下的localhost上失败,但不是127.0.0.1? (Windows 10)

时间:2017-08-26 10:54:35

标签: node.js dns windows-10 requestjs

鉴于我已经在localhost上启动并运行了一个服务器(请参阅下面的示例),在线上的节点命令行,我得到以下内容:

> var x = request('http://localhost:8080/test.html',
...               function(err) { if (err) console.log(err) })
undefined
> 

我希望能够一直得到上​​述结果。

如果我已切换到飞行模式,我会收到以下信息:

> var x = request('http://localhost:8080/test.html',
...               function(err) { if (err) console.log(err) })
undefined
> { Error: getaddrinfo ENOENT localhost:8080
    at Object.exports._errnoException (util.js:1022:11)
    at errnoException (dns.js:33:15)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'getaddrinfo',
  hostname: 'localhost',
  host: 'localhost',
  port: '8080' }

使用127.0.0.1而不是localhost再次尝试此操作无论是否我都处于飞行模式。

问题

为什么localhost不起作用?我可以看到它与Windows的DNS解析器有关。

设置上面的客户端代码

您需要先安装require

C:\> npm install require

更广泛的背景

我把它煮到最简单的我能做到的。有关更广泛的背景,请参阅Why does web-component-tester time out in flight mode?

示例服务器

问题不在于以下服务器,它只是一个简单的例子。我想可能任何本地服务器都会这样做,而不仅仅是NodeJS。问题出在客户端代码中,如上所述。

示例服务器的设置:

C:\> npm install connect serve-static

server.js:

var connect = require('connect')
var serveStatic = require('serve-static')
connect().use(serveStatic(__dirname)).listen(8080)

的test.html:

<html>Really not important, but necessary for completeness</html>

启动服务器:

C:\> node server.js

1 个答案:

答案 0 :(得分:0)

解决方案是安装Microsoft Loopback Adapter,如下所述: