Cómo agregar a New Line en Node.js

94

Estoy tratando de agregar datos a un archivo de registro usando Node.js y eso funciona bien, pero no va a la siguiente línea. \nno parece estar funcionando en mi función a continuación. ¿Alguna sugerencia?

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + "\n", null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }
DaBears
fuente
4
¿Está en Windows / utiliza un editor de texto basado en Windows para ver su archivo y, por lo tanto, necesita un par CRLF \r\n?
Phrogz

Respuestas:

153

Parece que está ejecutando esto en Windows (dada su H://log.txtruta de archivo).

Intente usar en \r\nlugar de solo \n.

Honestamente, \nestá bien; probablemente esté viendo el archivo de registro en el bloc de notas o en otra cosa que no muestre nuevas líneas que no sean de Windows. Intente abrirlo en un visor / editor diferente (por ejemplo, Wordpad).

Rob Hruska
fuente
2
estaba viendo en el bloc de notas :)
FacePalm
FYI en Notepad ++ puede encontrar todos los "\\ n" reemplazar "\ n" con el modo de búsqueda "Extendido" seleccionado en la parte inferior del cuadro de diálogo.
Dibujó el
91

En su lugar, utilice la constante os.EOL.

var os = require("os");

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + os.EOL, null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }
Shinzo
fuente
13
(1/2) Tenga en cuenta que dado que node.js puede ejecutarse en muchos entornos diferentes, es posible que pueda mover su aplicación de, digamos, un entorno de Windows a uno de Linux. eso significa que si su aplicación está agregando registros usando os.EOL, tendrá algunas líneas que terminan con /r/n(desde el momento en que la aplicación se estaba ejecutando en Windows) y luego tendrá filas que terminan solo con /n(cuando la aplicación se ejecuta en Linux). Esto tiene el potencial de causar algunos problemas, especialmente si existe algún análisis automático de los archivos de registro. Decidí usar /n.
Sharky
1
(2/2) Sin embargo, voté a favor de su respuesta, ya que sería la correcta, si viviéramos en un mundo perfectamente regulado.
Sharky
Utilizo Linux, pero me gustó este enfoque, ya que podría querer portabilidad en el futuro.
sdkks
Esta es la mejor respuesta porque funciona en plataformas cruzadas.
Mike Chelen
Bueno, tuve que empaquetar una aplicación que usaba fs.writecon os.EOLen un binario. Solía pkggenerar un binario para Windows. Cuando se ejecuta, el último registro escrito tiene una nueva línea adjunta (como se esperaba); pero, parece que otras aplicaciones de Windows tratan de que es un nuevo récord. Estoy buscando una solución alternativa.
cogitoergosum
0

use la \r\ncombinación para agregar una nueva línea en el nodo js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Codemaker
fuente