「Cannot GET /socket.io/socket.io.js」の解決法 (Node.js v0.8.0/express v3.0.0/socket.io v0.9.6)
色々調べながら 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やその周りのモジュールはバージョンアップが結構頻繁におこなわれているようで、ネット上の情報がすぐに古くなるのが難点。なかなか苦労しています。
コメントを残す