sailsを一旦諦めて、Express4系 + Socket.ioを使ってみました。
その際に、/socket.io/socket.io.jsが生成されない現象でハマったので、メモします。

Express4はだいぶちがう

Expressはsailsの内部でも使用されている、node.jsのwebアプリケーションフレームワークです。
Express3とExpress4でだいぶ書き方が変わってしまったのが特徴です。

bin/www

主な変更点として、bin/wwwというファイルが追加されたことが挙げられます。
Express3までは、アプリケーション実行の際に

1
$ node app.js

と実行していたのに対し、Express4では、

1
node bin/www

と実行する必要があります。実際には内部でコマンドがラップされ、npm startと打てばいいんですが。

Socket.ioではまった

Socket.ioの内容を、記事頼りにapp.js内部に書いていました。すると、どうしても動かない。
/socket.io/socket.io.jsが404となってしまいます。
これはsocket.ioが実行される際に自動生成されるファイルです。設定がおかしいみたいでした。

解決

解決方法は、bin/www内部にsocket.ioの記述をするというものでした。

変更後のbin/wwwを以下に示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env node
var debug = require('debug')('io-test');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

/*ここから追加*/

var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {

  console.log('a user connected');

  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
    io.emit('chat message', msg);
  });

  socket.on('disconnect', function(){
    console.log('user disconnected');
  });

});

/*ここまで追加*/

こうすることで、動作させることが出来ました。

結論

Expressはバージョンによって違いが大きいから、ググるときは”Express 4”と指定しよう。