2012-11-25 10 views
9

Właśnie zacząłem uczyć się nodejs. Obecnie pracuję z gniazdami i wykonuję program czatu.Nodejs napisać json do pliku

Chcę zapisać cały czat do pliku json. Obecnie mój kod jest następujący:

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!"); 
     } 
    }); 

    }); 

Obecnie działa idealnie, ale plik json zapisany w pliku jest nieprawidłowy.

To dało mi źle json

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

Powyższy kod jest wywoływana, gdy jest wyzwalany komunikat. Chcę json w tym formacie

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

Czy ktoś może mi pomóc w tym? Z góry dziękuję

Odpowiedz

11

Pierwszy zestaw nieprawidłowego JSON jest tworzony, ponieważ dodajesz fragment JSON do pliku za każdym razem, gdy otrzymasz wiadomość.

Drugi zestaw JSON również jest błędny - każda nazwa właściwości musi być unikalna.

Przypuszczalnie chcesz coś takiego:

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

W tym przypadku logika trzeba użyć to:

  1. danych odczytanych z pliku
  2. dane zanalizować jak JSON i przypisać do zmiennej
  3. W przypadku błędu, należy przypisać pustą tablicę do tej zmiennej
  4. push przedmiot wiadomość na końcu tablicy
  5. stringify tablicę
  6. Zastąp plik z nowym ciągiem
+0

dzięki zadziałało Jestem teraz odczytu pliku json, przechowywanie go jako ciąg w zmienna i używając 'concat', załączam dwie zmienne i zapisuję cały json do tego pliku. –