So hängen Sie eine neue Zeile in Node.js an

94

Ich versuche, Daten mit Node.js an eine Protokolldatei anzuhängen, und das funktioniert einwandfrei, aber es geht nicht in die nächste Zeile. \nscheint in meiner Funktion unten nicht zu funktionieren. Irgendwelche Vorschläge?

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
quelle
4
Verwenden Sie Windows / verwenden Sie einen Windows-basierten Texteditor, um Ihre Datei anzuzeigen, und benötigen Sie daher ein CRLF-Paar \r\n?
Phrogz

Antworten:

153

Es sieht so aus, als würden Sie dies unter Windows ausführen (unter Angabe Ihres H://log.txtDateipfads).

Versuchen Sie es mit \r\nstatt nur \n.

Ehrlich gesagt \nist in Ordnung; Wahrscheinlich wird die Protokolldatei im Editor oder in einem anderen Bereich angezeigt, in dem keine Nicht-Windows-Zeilenumbrüche gerendert werden. Versuchen Sie, es in einem anderen Viewer / Editor (z. B. Wordpad) zu öffnen.

Rob Hruska
quelle
2
wurde im
Editor angezeigt
Zu Ihrer Information in Notepad ++ können Sie alle "\\ n" finden, die "\ n" durch den am unteren Rand des Dialogfelds ausgewählten Suchmodus "Erweitert" ersetzen.
Drew
88

Verwenden Sie stattdessen die Konstante 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
quelle
12
(1/2) Bitte beachten Sie, dass node.js in vielen verschiedenen Umgebungen ausgeführt werden kann und es möglicherweise möglich ist, Ihre Anwendung von einer Windows-Umgebung in eine Linux-Umgebung zu verschieben. Das heißt, wenn Ihre Anwendung Protokolle mit os.EOLanfügt, werden einige Zeilen mit /r/n(ab dem Zeitpunkt, an dem die App unter Windows ausgeführt wurde) enden, und dann werden Zeilen nur mit /n(wenn die App unter Linux ausgeführt wird) enden . Dies kann zu Problemen führen, insbesondere wenn eine automatische Analyse der Protokolldateien vorhanden ist. Ich entschied mich nur zu verwenden /n.
Sharky
1
(2/2) Trotzdem habe ich Ihre Antwort positiv bewertet, da es die richtige wäre, wenn wir in einer perfekt regulierten Welt leben würden.
Sharky
Ich verwende Linux, mochte diesen Ansatz jedoch, da ich in Zukunft möglicherweise Portabilität wünschen würde.
SDKKS
Dies ist die beste Antwort, da es plattformübergreifend funktioniert.
Mike Chelen
Nun, ich musste eine Anwendung, die fs.writemit verwendet wurde, os.EOLin eine Binärdatei packen. Ich habe früher pkgeine Binärdatei für Windows generiert. Bei der Ausführung wird dem letzten geschriebenen Datensatz (wie erwartet) eine neue Zeile angehängt. Es scheint jedoch, als ob andere Windows-Anwendungen einen neuen Datensatz behandeln. Ich bin auf der Suche nach einem Workaround.
Cogitoergosum