我正在运行 node.js,如下所示:
> http = require('http')
> http.get('http://myhost.local:8080',
function (res) { console.log("RES" + res) }
).on('error', function (e) { console.log("Error:", e) })
> uri = require('url').parse("http://myhost.local:8080")
{ protocol: 'http:',
slashes: true,
auth: null,
host: 'myhost.local:8080',
port: '8080',
hostname: 'myhost.local',
hash: null,
search: null,
query: null,
pathname: '/',
path: '/',
href: 'http://myhost.local:8080/' }
> http.get(uri,
function (res) { console.log("RES" + res) }
).on('error', function (e) { console.log("Error:", e) })
隐式和显式解析的 URI 均引发错误,我得到以下输出:
错误:{ [错误:连接 ECONNREFUSED] 代码:'ECONNREFUSED',errno:'ECONNREFUSED',系统调用:'connect'}
主机myhost.local
是 in 的别名localhost
,即/etc/hosts
:
127.0.0.1 localhost myhost.local myhost
255.255.255.255 broadcasthost
::1 localhost myhost.local myhost
fe80::1%lo0 localhost myhost.local myhost
编辑:我几乎尝试了主机文件的所有排列,包括最明显的:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost myhost.local myhost
fe80::1%lo0 localhost
编辑我还应该提到我现在已经在不止一台 Mac 上尝试过这个。
尽管这似乎是一个相当常见的错误,但我没有看到任何有用的解释或解决方法。以下是一些值得注意的相关事实:
- 运行
$ wget http://myhost.local:8080
按预期工作,所以它不是防火墙问题。 - 运行
$ telnet myhost.local 8080
然后手动获取 url 工作正常,所以这不是一个奇怪的 HTTP 问题。 - 我使用 node.js 连接到其他主机没有问题,例如http://www.google.com
我希望有用的系统信息包括:
$ node -v
v0.9.11
$ uname -a
Darwin myhost.local 12.2.1 Darwin Kernel Version 12.2.1:
Thu Oct 18 12:13:47 PDT 2012; root:xnu-2050.20.9~1/RELEASE_X86_64 x86_64
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.8.2
BuildVersion: 12C3104
$ sudo netstat -nalt | grep LISTEN | grep 8080
tcp6 0 0 ::1.8080 *.* LISTEN
有谁知道这里发生了什么,以及可能的修复方法是什么?