Come aggiungere a New Line in Node.js


94

Sto cercando di aggiungere dati a un file di registro utilizzando Node.js e funziona correttamente ma non sta andando alla riga successiva. \nnon sembra funzionare nella mia funzione di seguito. Eventuali suggerimenti?

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
Sei su Windows / usando un editor di testo basato su Windows per visualizzare il file, e quindi bisogno di un paio CRLF, \r\n?
Phrogz

Risposte:


153

Sembra che tu lo stia eseguendo su Windows (dato il H://log.txtpercorso del tuo file).

Prova a usare \r\ninvece di solo \n.

Onestamente, \nva bene; probabilmente stai visualizzando il file di registro nel blocco note o qualcos'altro che non esegue il rendering di nuove righe non di Windows. Prova ad aprirlo in un visualizzatore / editor diverso (ad esempio Wordpad).


2
stava visualizzando nel blocco note :)
FacePalm

Cordiali saluti, in Notepad ++ puoi trovare tutto "\\ n" sostituire "\ n" con la modalità di ricerca "Estesa" selezionata nella parte inferiore della finestra di dialogo.
Drew

91

Usa invece la costante 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) Si noti che poiché node.js può essere eseguito su molti ambienti diversi, potrebbe essere possibile spostare l'applicazione da, diciamo, un ambiente Windows a uno Linux. ciò significa che se la tua applicazione sta accodando i log usando os.EOL, avrai alcune righe che finiscono con /r/n(dal momento in cui l'app era in esecuzione su Windows) e quindi avrai righe che terminano solo con /n(quando l'app viene eseguita su Linux). Ciò potrebbe causare alcuni problemi, soprattutto se è in atto un'analisi automatica dei file di registro. Ho deciso di usare solo /n.
Sharky

1
(2/2) Tuttavia ho votato contro la tua risposta in quanto sarebbe quella corretta, se vivessimo in un mondo perfettamente regolato.
Sharky

Uso linux ma mi è piaciuto questo approccio in quanto potrei volere la portabilità in futuro.
sdkks

Questa è la risposta migliore perché funziona su più piattaforme.
Mike Chelen

Bene, ho dovuto impacchettare un'applicazione che utilizzava fs.writecon os.EOLin un binario. Ho usato pkgper generare un binario per Windows. Quando viene eseguito, l'ultimo record scritto ha una nuova riga aggiunta (come previsto); ma, sembra che altre applicazioni Windows lo trattino è un nuovo record. Sto cercando una soluzione.
cogitoergosum

0

usa la \r\ncombinazione per aggiungere una nuova riga nel nodo js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.