Node.js'de Yeni Satır'a nasıl eklenir


96

Node.js kullanarak bir Günlük dosyasına veri eklemeye çalışıyorum ve bu iyi çalışıyor ancak bir sonraki satıra gitmiyor. \naşağıdaki işlevimde çalışmıyor gibi görünüyor. Herhangi bir öneri?

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
Windows'ta mısınız / dosyanızı görüntülemek için Windows tabanlı bir metin düzenleyicisi mi kullanıyorsunuz ve bu nedenle bir CRLF çiftine \r\nmi ihtiyacınız var ?
Phrogz

Yanıtlar:


158

Görünüşe göre bunu Windows'ta çalıştırıyorsunuz ( H://log.txtdosya yolunuz göz önüne alındığında ).

\r\nSadece yerine kullanmayı deneyin \n.

Dürüst olmak gerekirse, \niyi; muhtemelen günlük dosyasını not defterinde veya Windows olmayan yeni satırları oluşturmayan başka bir şeyde görüntülüyorsunuz. Farklı bir görüntüleyicide / düzenleyicide (örn. Wordpad) açmayı deneyin.


2
not defterinde görüntülüyordu :)
FacePalm

Bilginize, Notepad ++ 'da tüm "\\ n" değiştir "\ n"' i iletişim kutusunun altında "Genişletilmiş" arama modu seçili olarak bulabilirsiniz.
Drew

95

Bunun yerine os.EOL sabitini kullanın.

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

14
(1/2) Lütfen node.js birçok farklı ortamda çalışabildiğinden, uygulamanızı örneğin bir Windows ortamından linux ortamına taşımanın mümkün olabileceğini unutmayın. Bu, uygulamanız kullanarak günlükleri ekliyorsa os.EOL, biten bazı satırlara sahip olacağınız /r/n(uygulamanın pencerelerde çalıştığı andan itibaren) ve ardından yalnızca ile biten satırlarınız olacağı anlamına gelir /n(uygulama linux üzerinde çalışırken). Bu, özellikle günlük dosyalarının otomatik olarak ayrıştırılması durumunda bazı sorunlara yol açma potansiyeline sahiptir. Sadece kullanmaya karar verdim /n.
Sharky

2
(2/2) Yine de, mükemmel düzenlenmiş bir dünyada yaşasaydık, cevabınızı doğru cevap olacağı için oyladım.
Sharky

1
Linux kullanıyorum ancak ileride kullanımda taşınabilirlik isteyebileceğim için bu yaklaşımı beğendim.
sdkks 01

1
Bu en iyi cevaptır çünkü çapraz platformda çalışır.
Mike Chelen

Eh, kullanılan bir uygulama paketlemek zorunda fs.writeolan os.EOLbir ikili haline. Ben kullanılan pkgWindows için bir ikili oluşturmak için. Yürütüldüğünde, son yazılı kayda yeni bir satır eklenir (beklendiği gibi); ancak, diğer Windows uygulamaları yeni bir rekor gibi görünüyor. Bir çalışma için avlanıyorum.
cogitoergosum

3

\r\njs düğümüne yeni bir satır eklemek için kombinasyon kullanın

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.