次のように 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'、エラー番号: 'ECONNREFUSED'、syscall: 'connect' }
ホストはinmyhost.local
のエイリアスで、次のとおりです。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
編集:最も明白なものを含む、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
してから手動で URL を GET すると問題なく動作するため、奇妙な 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
ここで何が起こっているのか、そしてどのような修正が考えられるのか、誰にも分かりませんか?