【发布时间】:2017-11-17 09:53:11
【问题描述】:
客户代码
我正在使用
从客户端发送客户端的 idvar socket = io.connect('http://localhost:8080?token='+userID);
并在我的 io.on('connection') 中的服务器上获取它 函数使用
服务器代码
let token = socket.handshake.query.token;
所以现在我将 userID 存储在变量 token 中。
我也正在获取连接的 socket id 并将其存储为
var id = socket.id;
然后我将 userID 和 socketID 作为键值对存储在一个数组中。
var item = {};
item[token] = id;
这是一个我要推入的数组(该数组是在 on 连接函数之外声明的)
keyPairArray.push(item);
所以当两个人连接时,我会得到一个这样的数组。
[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
{ '1456': '17XF7mbh4vYr2WUSAAAB' } ]
但是当任何用户重新加载页面时,数组就会变成这样
[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
{ '1456': '17XF7mbh4vYr2WUSAAAB' },
{ '1456': 'tIhvkxFbSSAQEckWAAAC' } ]
用户 ID 相同,但 套接字 ID 不同。
每次用户重新加载页面或在另一个选项卡中打开页面时,socket id 都会发生变化,并且将相同的 UserID 附加到具有不同 的数组中套接字 ID.
我不想再次插入同一个用户。如果用户重新加载页面,我希望它检查数组中的键 userId 并将旧的 socket id 替换为新生成的。
这是我没有运气尝试的代码
var checkKeyPair = keyPairArray.some(function(item){
return item[token] === id;
});
if(checkKeyPair){
console.log("Hello");
}else{
keyPairArray.push(item);
console.log(keyPairArray);
}
【问题讨论】:
-
如果您想将每个项目与所有其他项目进行比较,您需要进行嵌套搜索。
标签: javascript arrays node.js sockets