2012-05-21 5 views

Antwort

30
//change the value in the in-memory object 
content.val1 = 42; 
//Serialize as JSON and Write it to a file 
fs.writeFileSync(filename, JSON.stringify(content)); 
+6

Insgesamt wäre es besser, einen asynchronen Schreibvorgang zu verwenden, da dies der Schwerpunkt von Node ist. Natürlich, ohne den Code zu sehen, wäre es schwierig, eine definitive Antwort zu geben. Es ist unwahrscheinlich, dass Sie wirklich eine Synchronisierung benötigen, außer Sie müssen absolut sicher sein, dass nichts anderes passieren kann, bis der Schreibvorgang abgeschlossen ist. Darüber hinaus sollte dies natürlich einen Fehlerüberprüfer haben, da Sie NIE sicher sein können, dass ein Dateischreibvorgang erfolgreich ist. –

+1

async vs. sync hängt genau davon ab, was Sie in welchem ​​Kontext tun. Wenn dies in einem Netzwerkdienst ist, benötigen Sie Async. Für ein Befehlszeilendienstprogramm ist die Synchronisierung in den meisten einfachen Fällen das geeignete Paradigma, aber nur der Kniespruch "Async ist besser" ist nicht korrekt. Mein Snippet basiert auf dem OP-Snippet für den Kontext. Die Frage betrifft auch nicht die Fehlerbehandlung und wenn das Schreiben der Datei fehlschlägt, ist das Beenden mit einem Stack-Trace ein vernünftiges Standardverhalten, da es nicht viel gibt, was Sie tun können, um sich davon zu erholen. –

+0

Da Knoten Schleife basiert ist, ist Async fast immer besser, so dass Sie die Schleife nicht blockieren, dies ist keine reflexartige Reaktion überhaupt, einfach Standard-Praxis für Knoten Dev. Ich sagte schon, dass es von der Anforderung abhängt und ich denke nicht, dass die Q irgendetwas über die Befehlszeile sagt? Wenn dies im Allgemeinen Teil eines größeren Codesatzes ist (nicht vom OP geklärt), ist die Fehlerbehandlung immer intelligent und bewährt. Einen Stack-Trace ablegen ist für Devs in Ordnung, aber für alle anderen Mist. –

57

Dies asynchron zu tun ist ziemlich einfach. Es ist besonders nützlich, wenn Sie daran interessiert sind, den Thread zu blockieren (wahrscheinlich).

var fs = require('fs'); 
var fileName = './file.json'; 
var file = require(fileName); 

file.key = "new value"; 

fs.writeFile(fileName, JSON.stringify(file), function (err) { 
    if (err) return console.log(err); 
    console.log(JSON.stringify(file)); 
    console.log('writing to ' + fileName); 
}); 

Der Vorbehalt ist, dass JSON auf einer Zeile in die Datei geschrieben wird und nicht verschönert. ex:

JSON.stringify(file, null, 2) 

null

{ 
    "key": "value" 
} 

wird ...

{"key": "value"} 

dies zu vermeiden, einfach diese zwei zusätzliche Argumente zu JSON.stringify hinzufügen - stellt die replacer Funktion. (In diesem Fall möchten wir den Prozess nicht ändern)

2 - steht für die Leerzeichen, die eingerückt werden sollen.

Verwandte Themen