我正在運行的node.js如下:莫名node.js的HTTP連接拋ECONNREFUSED(IPv6的?)
> 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和我碰到下面的輸出兩個:
Error: { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect' }
主機myhost.local
是用於/etc/hosts
localhost
的別名,是:
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
編輯:我試過幾乎所有排列的hosts文件,其中最明顯的:
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
然後手動GET'ing網址工作正常,所以它不是一個奇怪的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
有沒有人有一個修復可能是任何想法是怎麼回事,什麼?
你,如果你使用'localhost',而不是'myhost.local'得到同樣的錯誤? – JohnnyHK 2013-03-05 15:13:02
東西在本地主機上運行:80? – Floby 2013-03-05 15:13:27
@JohnnyHK,@Floby:連接到的應用程序是Google App Engine,它綁定到'myhost'。讓我發佈我的'netstat'輸出雖然 - 它可能是照亮 – 2013-03-05 15:15:10