#javascript #html #node.js #websocket #socket.io
#javascript #HTML #node.js #websocket #socket.io
Вопрос:
В настоящее время я возлюсь с сокетом.ввод-вывод amp; node.js , мне было интересно, как бы я установил цвет администратора, например, на красный, но только для администратора, а не для других пользователей.
вот как я пытаюсь это сделать (красный цвет для администраторов и обычный цвет для не-администраторов):
socket.on('connected users', function(data){
console.log(data.rank);
var html = '';
for(i = 0; i < data.users.length; i ){
if(data.rank == "Admin"){
html = '<li class="list-group-item text-lightred">' data.users[i] '</li>';
}else{
html = '<li class="list-group-item">' data.users[i] '</li>';
}
}
$users.html(html);
});
но поскольку каждый получает параметр «data.rank», он будет применяться ко всем.
Это мой серверный код (emit)
io.sockets.emit('connected users', {
users: users,
});
Я новичок в node.js amp; socket.io , так что я как бы застрял на этом.
Заранее спасибо за любую помощь!
Редактировать:// Добавление подключенных пользователей в массив
const userName = sanitizer.escape(chatusername);
users.push(userName);
users[socket.id] = {userName, userRank};
console.log(users[socket.id]);
клиентская сторона:
socket.on('connected users', function(data){
var html = '';
for(i = 0; i < data.users.length; i ){
console.log(data.users[i].userRank);
console.log(data);
if(data.users[i].userRank == "Admin"){
html = '<li class="list-group-item text-lightred">' data.users[i] '</li>';
}else{
html = '<li class="list-group-item">' data.users[i] '</li>';
}
}
$users.html(html);
});
Комментарии:
1. измените
if(data.rank == "Admin"){
наif (data.users[i].rank == "Admin") {
, затем укажите ранг для каждого элемента пользовательского массива при подключении, это помогло бы, если бы вы показали, как вы добавляете пользователя в массив пользователей2. Я добавил, как я добавляю пользователей в массив / карту, также «data.users [i].rank» возвращает неопределенный
3. да, это было бы, вам нужно было бы сделать
users.push({userName, userRank});
, затем изменить весь код на стороне клиента, который просто ожидает массив строк, иdata.users[i].userName
data.users[i].userRank
вместо этого использовать and .. в принципе, вам нужно присвоить ранг каждому пользовательскому элементу, прежде чем помещать его в массив, затем при получении клиентского массива вы узнаете ранг ..как есть, ваш код просто отвечает собственным рейтингом, поэтому функция, которую вы используете, невозможна.4. sidenote вы могли бы добавить все
users
это, напримерusers[socket.id] = {userName, userRank};
, тогда вы можете узнать у клиента, какой идентификатор сокета есть у каждого пользователя, и проще поддерживать объект приdelete users[socket.id]
отключении и т. Д., Также у вас есть Object.values(users), если вам когда-нибудь понадобится массив5. Хорошо, я использую массив users только сейчас, я отредактировал свой пост выше с помощью нового кода, и он по-прежнему выдает мне «undefined»
data.users[i].userRank
, не уверен, что я делаю что-то не так —console.log(users[socket.id]);
выдает мне вывод{ userName: 'username', userRank: 'Admin' }
tho.