Jak dołączyć do nowej linii w Node.js.

96

Próbuję dołączyć dane do pliku dziennika za pomocą Node.js i to działa dobrze, ale nie przechodzi do następnego wiersza. \nnie wydaje się działać w mojej funkcji poniżej. Jakieś sugestie?

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
źródło
4
Czy korzystasz z systemu Windows / korzystasz z edytora tekstu opartego na systemie Windows do przeglądania pliku i dlatego potrzebujesz pary CRLF \r\n?
Phrogz

Odpowiedzi:

158

Wygląda na to, że używasz tego w systemie Windows (biorąc pod uwagę H://log.txtścieżkę do pliku).

Spróbuj użyć \r\nzamiast po prostu \n.

Szczerze, wszystko w \nporządku; prawdopodobnie przeglądasz plik dziennika w notatniku lub czymś innym, co nie renderuje znaków nowej linii innych niż Windows. Spróbuj otworzyć go w innej przeglądarce / edytorze (np. Wordpad).

Rob Hruska
źródło
2
przeglądał w notatniku :)
FacePalm
FYI w Notepad ++ możesz znaleźć wszystkie "\\ n" zamień "\ n" na "Rozszerzony" tryb wyszukiwania wybrany na dole okna dialogowego.
Drew
95

Zamiast tego należy użyć stałej 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
źródło
14
(1/2) Należy pamiętać, że ponieważ node.js może działać w wielu różnych środowiskach, może być możliwe przeniesienie aplikacji z, powiedzmy, środowiska Windows do środowiska linuxowego. oznacza to, że jeśli aplikacja dołącza logi za pomocą os.EOL, niektóre linie będą kończyć się na /r/n(od czasu, gdy aplikacja była uruchomiona w systemie Windows), a następnie będziesz mieć wiersze kończące się tylko na /n(gdy aplikacja działa w systemie Linux). Może to stwarzać pewne problemy, zwłaszcza jeśli działa automatyczne analizowanie plików dziennika. Postanowiłem po prostu użyć /n.
Sharky
2
(2/2) Niemniej jednak zagłosowałem za twoją odpowiedzią, ponieważ byłaby ona poprawna, gdybyśmy żyli w doskonale uregulowanym świecie.
Sharky
1
Używam Linuksa, ale podobało mi się to podejście, ponieważ chciałbym mieć przenośność w przyszłości.
sdkks
1
To najlepsza odpowiedź, ponieważ działa na wielu platformach.
Mike Chelen,
Cóż, musiałem spakować aplikację używaną fs.writew programie os.EOLdo pliku binarnego. Kiedyś pkggenerowałem plik binarny dla systemu Windows. Po wykonaniu, ostatni zapisany rekord ma dołączoną nową linię (zgodnie z oczekiwaniami); ale wygląda na to, że inne aplikacje Windows traktują to jako nowy rekord. Szukam obejścia.
cogitoergosum
3

użyj \r\nkombinacji, aby dołączyć nową linię w node js

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