我有一个用户发送POST请求的场景,在Express中设置路由,获取post数据,验证它,将其存储在db中然后我需要将它广播到所有连接的套接字。但是由于套接字变量在io.sockets.on('connection')
内可用,我可以通过这种方式使用闭包来访问它的内部范围:
Var a = {}; //global
io.sockets.on('connection',function(socket){
a.inner = function(data){
socket.broadcast.emit('boo',data)
}
}
然后拨打a.inner(data)
这是正常的吗?是否有更好的方式来访问或调用内部函数?
由于
答案 0 :(得分:0)
我总是使用这个:
var userIdSocketMapper = {};
io.sockets.on('connection', function (socket) {
var userId = socket.handshake.userId;
userIdSocketMapper[userId] = socket;
});
app.post('/:userId', function(req, res) {
var socket = userIdSocketMapper[req.params.userId];
if (socket) {
socket.broadcast.emit('boo', data);
}
});