2012-11-25 127 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到該文件。 –