Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何向节点中的此对象添加数据?_Javascript_Node.js - Fatal编程技术网

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,即使新用户出现。理想情况下,我希望看到它增加。让我看看我是否找到了什么