我有一个项目,当用户登录时会在地图上绘制标记。 但是在用户退出后标记会停留。
我正在尝试编写断开连接功能来销毁该标记。 但它没有用。
我需要客户端吗?
服务器端
// Socket markers start
io.on('connection', function(socket) {
socket.on('marker', function(data) {
data.socketId = socket.id;
User.findById(socket.request.session.passport.user, function(err, user){
if(user){
data.socketId = socket.id;
data.user = user;
markers.push(data);
console.log(markers);
// markers[socket.id] = data;
io.emit('show-marker', markers);
}
});
});
// socket.on('show-marker', )
socket.on('show-user-location', function(data) {
io.emit('show-user-location', data);
});
socket.on('disconnect', function(){
console.log( socket.name + ' has disconnected from the chat.' + socket.id);
delete markers[socket.id];
});
});
答案 0 :(得分:2)
我猜markers
是一个数组,因为您使用的是push
。因此delete markers[socket.id]
无法正常运行。您必须搜索它 - 遍历所有项目,检查ID是否匹配,然后使用splice
。
因此,最好使用Object
来存储标记,例如:
// on connect
markers[data.id] = data;
// on disconnect
delete markers[socket.id]
如果您仍想使用数组,这将适合您:
// on disconnect
for (var i = 0; i < markers.length; i++) { // loop through all markers
if (socket.id == markers[i].id) { // find the one you need
markers.splice(i, 1); // remove it from array
break; // stop searching - already found it
}
}