ネットサービスとかGoogleとか豆知識とか。

Index > Node.js > 「Cannot GET /socket.io/socket.io.js」の解決法 (Node.js v0.8.0/express v3.0.0/socket.io v0.9.6)
Node.js
2012年06月30日 00:58

「Cannot GET /socket.io/socket.io.js」の解決法 (Node.js v0.8.0/express v3.0.0/socket.io v0.9.6)

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

色々調べながら Node.js (v0.8.0) で express (v3.0.0 beta4) と socket.io (v0.9.6) を使おうとしたら、うまくいきませんでした。

/socket.io/socket.io.jsが生成されない

socket.io を使う場合はHTMLファイルに、

  <script src="/socket.io/socket.io.js"></script>

と記述します。

うまくいっていれば、この「/socket.io/socket.io.js」が自動生成されるので、http://127.0.0.1:3000/socket.io/socket.io.js (ポート3000番で起動している場合) にアクセスすれば、JavaScriptのソースが表示されるはずなのです。

しかし画面には「Cannot GET /socket.io/socket.io.js」の文字が。。

なかなかうまくいく情報が見つからなかったのですが、最終的に「node.js - nodejs socket.io cannot connect to server? - Stack Overflow」の投票数が 0 だった Answer の通りにすると、expressのバージョンを下げなくてもうまくいきました。

express()の.listen()がサーバーオブジェクトを返す

簡単に書くとこうなります。

var express = require('express')
  , app = express()
  , io = require('socket.io').listen(app.listen(3000));

require('socket.io').listen() の引数にはサーバーオブジェクトを渡してあげないといけないのですが、express() は createServer() メソッドがなくなったので、 app を渡しても意味がありません。

で、その代わりに app.listen(3000) を渡すと解決するようです。これで動いてるので多分大丈夫だと思います。。

Node.jsやその周りのモジュールはバージョンアップが結構頻繁におこなわれているようで、ネット上の情報がすぐに古くなるのが難点。なかなか苦労しています。