Cara menambahkan Baris Baru di Node.js

96

Saya mencoba Menambahkan data ke file Log menggunakan Node.js dan itu berfungsi dengan baik tetapi tidak akan ke baris berikutnya. \nsepertinya tidak berfungsi dalam fungsi saya di bawah. Ada saran?

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
sumber
4
Apakah Anda menggunakan Windows / menggunakan editor teks berbasis Windows untuk melihat file Anda, dan karenanya memerlukan pasangan CRLF \r\n,?
Phrogz

Jawaban:

158

Sepertinya Anda menjalankan ini di Windows (mengingat H://log.txtjalur file Anda ).

Coba gunakan \r\nalih-alih hanya \n.

Jujur saja, \nbaik-baik saja; Anda mungkin melihat file log di notepad atau sesuatu yang lain yang tidak membuat baris baru non-Windows. Coba buka di penampil / editor yang berbeda (misalnya Wordpad).

Rob Hruska
sumber
2
sedang melihat di notepad :)
FacePalm
FYI di Notepad ++ Anda dapat menemukan semua "\\ n" ganti "\ n" dengan mode pencarian "Extended" yang dipilih di bagian bawah dialog.
Drew
95

Gunakan konstanta os.EOL sebagai gantinya.

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
sumber
14
(1/2) Harap dicatat bahwa karena node.js dapat berjalan di banyak lingkungan yang berbeda, dimungkinkan untuk memindahkan aplikasi Anda dari katakanlah lingkungan windows ke linux. itu berarti jika aplikasi Anda menambahkan log menggunakan os.EOLAnda akan memiliki beberapa baris yang diakhiri dengan /r/n(dari saat aplikasi berjalan di windows) dan kemudian Anda akan memiliki baris yang diakhiri dengan /n(ketika aplikasi berjalan di linux). Hal ini berpotensi menimbulkan masalah terutama jika penguraian otomatis file log ada. Saya memutuskan untuk hanya menggunakan /n.
Sharky
2
(2/2) Namun demikian saya memuji jawaban Anda karena itu akan menjadi jawaban yang benar, jika kita hidup di dunia yang diatur dengan sempurna.
Sharky
1
Saya menggunakan linux tetapi menyukai pendekatan ini karena saya mungkin ingin portabilitas digunakan di masa mendatang.
sdkks
1
Ini adalah jawaban terbaik karena berfungsi lintas platform.
Mike Chelen
Nah, saya harus mengemas aplikasi yang dulu fs.writedengan os.EOLmenjadi biner. Saya biasa pkgmembuat biner untuk Windows. Ketika dieksekusi, catatan tertulis terakhir memiliki baris baru yang ditambahkan padanya (seperti yang diharapkan); Tapi, sepertinya suguhan aplikasi Windows lain itu adalah rekor baru. Saya mencari solusi.
cogitoergosum
3

gunakan \r\nkombinasi untuk menambahkan baris baru di node js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Pembuat kode
sumber