Javascript 如何在节点中的模块之间共享阵列状态?

Javascript 如何在节点中的模块之间共享阵列状态?,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我正在尝试用Node和Socket.io构建一个简单的游戏。我有一系列相互关联的玩家 连接时我添加一个播放器,断开连接时我删除它。很简单。我的主文件中有所有套接字事件,如果需要,任何套接字事件都可以访问阵列 当我想从文件中删除套接字事件并将它们放在单独的模块中时,问题就产生了 我想我只需像这样将连接的播放器传递到模块: require('./app_modules/socket-messages.js')(io, db, _, connectedPlayers); 但它不工作,模块被兑现,它

我正在尝试用Node和Socket.io构建一个简单的游戏。我有一系列相互关联的玩家

连接时我添加一个播放器,断开连接时我删除它。很简单。我的主文件中有所有套接字事件,如果需要,任何套接字事件都可以访问阵列

当我想从文件中删除套接字事件并将它们放在单独的模块中时,问题就产生了

我想我只需像这样将连接的播放器传递到模块:

require('./app_modules/socket-messages.js')(io, db, _, connectedPlayers); 
但它不工作,模块被兑现,它不会共享阵列的状态。如果我理解正确的话

我读到不要使用全局变量


我如何保持一组连接的玩家并在模块之间共享其状态?

节点新手本人在这里,但也许我可以提供帮助

您可能需要查看节点上的
模块导出

您可以选择要导出的内容,它可以是一个函数,也可以只是一个变量,在这种情况下,我们可能会说您只想返回ConnectedPlayer数组,它位于名为
CurrentPlayer.js
的文件中

currentPlayers.js
中,我将导出数组:

var connectPlayers = ["Ray", "Jason", "Kingtak", "Derek", "Tyler"];
//some code then somewhere appropriate
module.exports = connectedPlayers;
然后在任何我需要添加信息的地方

var ConnectedPlayers = require('./path/to/file/currentPlayers');

我不太明白ConnectedPlayer是什么,但是如果它们真的必须是对许多模块可用的全局持久状态,那么它们可能应该位于全局变量中,或者作为全局模块对象的属性。ConnectedPlayer只是我想要共享的连接播放器数组,我还需要共享它的状态。使其全局化可能会起作用,我只是不想这样做,因为人们不推荐它。不需要全局数据时不应使用它,但如果需要,则没有替代品。另外,节点缓存您的代码,而不是使用变量嘿!问题是,模块是兑现的,所以我无法在更新时更新它。至少我认为正在发生的是:)