F.Ko-Jiの「一秒後は未来」

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など