2012-05-21 15 views

Respuesta

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

En general, sería mejor utilizar una escritura asíncrona ya que este es el foco principal de Nodo. Por supuesto, sin ver el código circundante sería difícil dar una respuesta definitiva. Es poco probable que realmente necesite una sincronización a menos que necesite estar absolutamente seguro de que nada más puede suceder hasta que la escritura se haya completado. Además, por supuesto, esto debería tener un comprobador de errores ya que NUNCA se puede estar seguro de que la escritura de un archivo tendrá éxito. –

+1

async vs. sync depende exactamente de lo que está haciendo en qué contexto. Si esto está en un servicio de red, necesita asincronización. Para una utilidad de línea de comandos, la sincronización es el paradigma apropiado en la mayoría de los casos simples, pero el simple reflejo de que "asíncrono es mejor" no es correcto. Mi fragmento se basa en el fragmento de OP para el contexto. La pregunta tampoco es sobre el manejo de errores y si la escritura del archivo falla, salir con un seguimiento de pila es un comportamiento predeterminado razonable porque no hay mucho que pueda hacer para recuperarse de eso. –

+0

Como el nodo está basado en bucle, la asincrónica es casi siempre mejor, por lo que no bloquea el bucle, no se trata de una reacción instintiva, simplemente es una práctica estándar para el nodo Dev. Ya dije que depende de los requisitos y no creo que la Q diga nada sobre la línea de comandos. También en general, si esto es parte de un conjunto de códigos más grande (no aclarado por el OP), el manejo de errores siempre es inteligente y la mejor práctica. Volcar un rastro de pila está bien para los desarrolladores, pero es una mierda para todos los demás. –

57

Hacer esto de forma asíncrona es bastante fácil. Es particularmente útil si le preocupa bloquear el hilo (probablemente).

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

La advertencia es que json se escribe en el archivo en una línea y no se embellece. por ejemplo:

{ 
    "key": "value" 
} 

será ...

{"key": "value"} 

Para evitar esto, sólo tiene que añadir estos dos argumentos adicionales para JSON.stringify

JSON.stringify(file, null, 2) 

null - representa la función de sustituto. (en este caso no queremos alterar el proceso)

2 - representa los espacios para sangrar.

Cuestiones relacionadas