Javascript 如何向节点中的此对象添加数据?
在客户端,当您打开套接字时,它将发送以下消息:Javascript 如何向节点中的此对象添加数据?,javascript,node.js,Javascript,Node.js,在客户端,当您打开套接字时,它将发送以下消息: socket.onopen = function(event) { var jsonstring = JSON.stringify({"type":"join", "id":myStorage.username}); socket.send(jsonstring); }; 在服务器端,我们有一个名为clientMessages的对象,但我似乎无法判断是否有数据被添加到其中。此外,它需要以某种方式保存服务器上的所有活动用户 var
socket.onopen = function(event) {
var jsonstring = JSON.stringify({"type":"join", "id":myStorage.username});
socket.send(jsonstring);
};
在服务器端,我们有一个名为clientMessages的对象,但我似乎无法判断是否有数据被添加到其中。此外,它需要以某种方式保存服务器上的所有活动用户
var clientMessages = {};
socket.on("message", function (data) {
var parsed = JSON.parse(data);
if (parsed.type === "join") {
var jsonstringy = JSON.stringify({ type: "history", value: clientMessages});
socket.send(jsonstringy);
clientMessages[parsed.id] = [parsed];
} else if (parsed.type === "leave") {
delete clientMessages[parsed.id];
} else {
clientMessages[parsed.id].push(parsed);
}
});
您可以console.log(clientMessages)
每次收到一条消息来检查它,但这种方式肯定是可以的。我看不出有什么问题
编辑:
好的,我看到了源代码,var-clientMessages={}
位于wss.on('connec…这意味着每次有人连接它时都会重置该变量。您应该将var clientMessages={};
移动到wss.on('..
基本上你会得到这样的结果
var clientMessages = {}; //line 20
wss.on("connection", function (socket) { //line 21 not edited
无论哪个函数需要监视这个对象,都要向它们发送
clientMessages.length
。然后这个方法可以执行下一步必要的操作。您只想知道所有用户的计数吗?然后添加一个简单的var和递增/递减itso,如果我有那个log语句,当新用户加入时,我们会看到:{charlie:[{type:'join',id:'charlie'}]}{aaron:[{type:'join',id:'aron'}]}aaron替换了charlie吗?我怎么把每个人都吐出来?这意味着你以某种方式重置了var clientMessages={}
我想您可能出于某种原因再次调用了该函数,这是可能的吗?我指的是封装代码的函数。要检查这一点,您可以在该语句下方放置一个console.log('reseted');
(var-clientMessages={};
)如果resetted出现的次数更多,则意味着您可以多次调用该函数,如果您愿意,您可以发布完整的文件,以便更容易地修复。OK在这里:前端在/webok中,我将其移到上面,这一行47仍然只记录第一个事件,因为新用户出现在console.log上(clientMessages[parsed.id].length);这很正常,您需要的是console.log(Object.keys(clientMessages.length)
或只是打印clientMessages这与我要查找的内容相同,但它显示为未定义的-console.log(clientMessages.length);确定记录clientMessages[parsed.id].length显示数字1,即使新用户出现。理想情况下,我希望看到它增加。让我看看我是否找到了什么