сокет.уникальный цвет ввода-вывода для администратора / пользователя

#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.