/socket.io/socket.io.jsの読み込みに失敗するとき

Express(node.js)でSocket.ioをつかったアプリを開発している時にエラーがおきました。
その対処法がなかなかわからなかったので、忘備録として残しておきます。

環境

  • Mac OSX 10.8.4 Mountain Lion
  • Node.js v0.10.12
  • Express v3.3.1
  • Socket.io v0.9.16

ローカル開発です。

起きたエラー

クライアント側でsocket.io.jsが読み込まれない。
ChromeのConsoleに以下のように表示される。

Failed to load resource: the server responded with a status of 404 (Not Found)  http://localhost:3000/socket.io/socket.io.js
Uncaught ReferenceError: io is not defined

対処方法

app.jsを以下のように書き換えた。
コードの該当部分のみを抜粋。

変更前

var app = module.exports = express.createServer();

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

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

変更後

var app = express();

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

var io=require('socket.io').listen(server);