9

nodejsの学習を始めたばかりです。私は現在、ソケットを使って作業していて、チャットプログラムを作成しています。

チャット全体を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?"}

誰かがこれで私を助けることができますか?前もって感謝します

4

1 に答える 1

11

メッセージを受け取るたびにJSONの一部をファイルに追加しているため、間違ったJSONの最初のセットが作成されます。

JSONの2番目のセットも間違っています-各プロパティ名は一意である必要があります。

おそらくあなたは次のようなものが欲しいでしょう:

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

この場合、使用する必要のあるロジックは次のとおりです。

  1. ファイルからデータを読み取る
  2. データをJSONとして解析し、変数に割り当てます
  3. エラーが発生した場合は、その変数に空の配列を割り当てます
  4. push配列の最後にあるメッセージオブジェクト
  5. 配列を文字列化する
  6. 新しい文字列でファイルを上書きします
于 2012-11-25T15:12:55.053 に答える