Javascript Socket.io发出返回不同值的事件

Javascript Socket.io发出返回不同值的事件,javascript,node.js,sockets,Javascript,Node.js,Sockets,我正在用socket.io制作一个应用程序。我试图在两个不同的网页中显示已连接用户的列表。这是我的密码- Server.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,func

我正在用socket.io制作一个应用程序。我试图在两个不同的网页中显示已连接用户的列表。这是我的密码-

Server.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页面中打印出所有连接的用户,并且是所需的输出

但是当我尝试再次使用server.js中的users数组作为第二个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);
});
我得到一个空的用户数组。套接字事件是特定于页面的吗?在离开第一页后,我的用户数组会被重置为空数组吗?任何帮助都将不胜感激


注意:-第二个js文件在第一个js文件之后执行。

您在每个文件1和文件2中进行单独的套接字连接,因此在不同的页面上会有不同的数据。啊,我明白了。我是否可以在我的所有页面中使用同一个套接字实例?重用单个套接字实例,这样就不需要重新连接它。导出套接字变量。您在每个文件1和文件2中进行单独的套接字连接,因此在不同的页面上会有不同的数据。啊,我明白了。我是否可以在我的所有页面中使用同一个套接字实例?重用单个套接字实例,这样就不需要重新连接它。导出套接字变量。