これが私がやろうとしたことです:
サーバー.js
app = require('express.io')();
app.http().io();
app.get('/', function(req, res) {
res.sendfile(__dirname + '/client.html');
});
app.put('/create', function(req, res) {
req.io.route('articles');
});
app.io.route('join', function(req) {
req.io.join(req.data);
req.io.room(req.data).broadcast('newUser', {});
});
app.io.route('articles', function(req) {
var message = {
message: 'Article created'
};
req.io.room(req.data).broadcast('created', message);
req.io.respond(message);
});
app.listen(3000);
client.html
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
io = io.connect();
io.emit('join','articles');
io.on('created', function(data) {
alert(data.message);
});
io.on('newUser', function(data) {
alert('New user');
});
$.ajax({
url: 'http://localhost:3000/create',
data: 'articles',
type: 'PUT'
}).done(function(res) {
alert('AJAX succeded');
}).fail(function(res) {
alert('AJAX failed');
});
</script>
問題は、サーバー上の次のコード行でした。
req.io.room(req.data).broadcast('created', message);
次のエラーが発生します。
Object #<Object> has no method 'room' at Object.articles
目的は、「/created」へのリクエストが行われた後にルームにメッセージをブロードキャストすることでしたが、リクエストを行ったクライアントにはブロードキャストしませんでした。app.io.room を使用してブロードキャストしましたが、リクエストを行ったクライアントを含むすべてのクライアントに送信されますが、それは望ましくありません。
だから私の質問は、それができるかどうかであり、何が間違っているのかということですが、できない場合は、なぜできないのかについての少しの情報がいいでしょう:)