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

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).


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

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");
  });
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.