2012-11-25 130 views
9

我刚开始学习nodejs。我目前正在使用套接字并制作聊天程序。Nodejs将json写入文件

我想保存整个聊天到一个json文件。目前我的代码是这样的:

socket.on('chat', function (data) { 
    message = {user : data.message.user, message : data.message.message}; 
    chat_room.sockets.emit('chat', {message: message}); 

    jsonString = JSON.stringify(message); 

    fs.appendFile("public/chat.json", jsonString, function(err) { 
     if(err) { 
      console.log(err); 
     } else { 
      console.log("The file was saved!"); 
     } 
    }); 

    }); 

这是目前工作完美,但在文件中写入的json是错误的。

这给了我一个错误的JSON

{"user":"niraj","message":"hw r u?"}{"user":"ntechi","message":"hello"}{"user":"ntechi","message":"hw r u?"}

被触发消息时,上面的代码被调用。我想在这个格式JSON

{"user":"awd","message":"hw r u?","user":"ntechi","message":"hello","user":"ntechi","message":"hw r u?"}

谁能帮我在这?在此先感谢

回答

11

第一组错误的JSON是因为您每次收到邮件时将一段JSON附加到文件中而创建的。

第二组JSON也是错误的 - 每个属性名称必须是唯一的。

想必你想要的东西,如:

[ 
{"user":"niraj","message":"hw r u?"}, 
{"user":"ntechi","message":"hello"}, 
{"user":"ntechi","message":"hw r u?"} 
] 

在这种情况下,你需要使用的逻辑是:从文件

  1. 读取数据
  2. 解析数据作为JSON和分配给一个变量
  3. 如果发生错误,请将空数组分配给该变量
  4. push消息对象到阵列
  5. 的结束字符串化阵列
  6. 覆盖文件用新串
+0

由于它的工作 我现在读JSON文件,将其存储在一个字符串变量,并通过使用'concat'我附加两个变量,并写入整个json到该文件。 –