Событие emit Socket.io, возвращающее разные значения - PullRequest
1 голос
/ 15 апреля 2020

Я делаю приложение с socket.io. Я пытаюсь отобразить список подключенных пользователей на двух разных веб-страницах. Вот мой код -

Сервер. js файл -

const express = require('express');
const ejs = require('ejs');

const app = express();

app.set('view engine','ejs');
app.use(express.static('public'));

server = app.listen(3000,function(){
    console.log("Server running");
});

const io = require('socket.io')(server);

var users = [];

io.on('connection',function(socket){
    socket.on('new-user',function(name){
        users.push(name);
        io.sockets.emit('user-connected',users);
    });
    socket.on('fetch-user-list',function(){
        io.sockets.emit('user-list',users);
    })
});

Теперь у меня есть два HTML файла, каждый из которых связан с отдельным файлом js -

file1. js -

var socket = io.connect();
const name = prompt('What is your name?');

socket.emit('new-user',name);
container = document.getElementById('container');

socket.on('user-connected',function(users){
    container.innerHTML = '';
    users.forEach(element => {
        const listElement = document.createElement('li');
        listElement.innerText = element;
        container.append(listElement);
    });  
});

Таким образом, это распечатывает всех подключенных пользователей на подключенной странице HTML и является желаемым выводом.

Но когда я пытаюсь использовать пользователи массив с сервера. js снова для второго js файла, например, -

file2. js -

var socket = io.connect();
socket.emit('fetch-user-list');
container = document.getElementById('container');

socket.on("user-list",function(users){
   console.log(users);
});

Я получаю пустых пользователей массив. Указана ли страница событий сокета c и каким-то образом мой пользовательский массив сбрасывается в пустой массив после ухода с первой страницы? Мы будем благодарны за любую помощь.

Примечание: - Второй файл js выполняется после первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...