客户代码
我正在使用
从客户端发送客户端的 idvar socket = io.connect('http://localhost:8080?token='+userID);
并在 io.on('connection')中将其放在服务器上 功能使用
服务器代码
let token = socket.handshake.query.token;
现在我将 userID 存储在变量令牌中。
此外,我正在获取连接的套接字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 不同。
每次用户重新加载页面或在另一个标签页中打开页面时,套接字ID 都会更改,并且 UserID 会以不同的附加到数组中套接字ID 。我不想再次插入同一个用户。如果用户重新加载页面,我希望它检查 userId 这是数组中的键,并将旧的套接字ID 替换为新生成的。
这是我试过的没有运气的代码
var checkKeyPair = keyPairArray.some(function(item){
return item[token] === id;
});
if(checkKeyPair){
console.log("Hello");
}else{
keyPairArray.push(item);
console.log(keyPairArray);
}
答案 0 :(得分:3)
试试这个(如果ES6不是问题):
let token = socket.handshake.query.token;
var id = socket.id;
var item = { [token]: id };
var index = keyPairArray.findIndex(it => Object.keys(it)[0] === token);
if (index === -1) {
keyPairArray.push(item);
} else {
keyPairArray[index] = item;
}
答案 1 :(得分:1)
您可以将Array#some
与Object.keys
结合使用,以检查是否存在具有给定userId的用户,如下所示:
const users = [{
'10': 'HvlunYNFCcF5vK0-AAAA'
},
{
'1456': '17XF7mbh4vYr2WUSAAAB'
}
];
function checkIfUserExists(userId) {
return users.some((user) => Object.keys(user).indexOf(userId) > -1)
}
console.log(checkIfUserExists('10'));
console.log(checkIfUserExists('11'));
答案 2 :(得分:0)
var users = [{
'10': 'HvlunYNFCcF5vK0-AAAA'
},
{
'1456': '17XF7mbh4vYr2WUSAAAB'
}
];
function saveUser(newUserId) {
users.forEach(function(key) {
if (Object.keys(key)[0] == newUserId)
console.log('user exists');
else {
var item = {};
item[newUserId] = 'fsdfsdgdfsgdfhgf55665hftgh56';
users.push(item);
}
});
}
saveUser('1456');