这是我尝试做的事情:
server.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
目标是在请求创建&#39;之后向房间广播消息。是,但不是提出请求的客户。我已经使用app.io.room进行广播,但会发送给所有客户,包括提出请求的客户,我不想要。
所以我的问题是,如果它可以完成,那么我做错了什么,但如果它不能,那么关于为什么不好的一点点信息:)