วิธีต่อท้าย New Line ใน Node.js


96

ฉันพยายามต่อท้ายข้อมูลลงในไฟล์บันทึกโดยใช้ Node.js และใช้งานได้ดี แต่จะไม่ไปที่บรรทัดถัดไป \nดูเหมือนจะไม่ทำงานในฟังก์ชันของฉันด้านล่าง ข้อเสนอแนะใด ๆ ?

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 / ใช้โปรแกรมแก้ไขข้อความบน Windows เพื่อดูไฟล์ของคุณและจำเป็นต้องมีคู่ CRLF \r\nหรือไม่?
Phrogz

คำตอบ:


158

ดูเหมือนว่าคุณกำลังใช้งานบน Windows (กำหนดH://log.txtเส้นทางไฟล์ของคุณ)

ลองใช้\r\nแทน just \n.

สุจริต\nไม่เป็นไร คุณอาจกำลังดูไฟล์บันทึกใน notepad หรืออย่างอื่นที่ไม่แสดงบรรทัดใหม่ที่ไม่ใช่ Windows ลองเปิดในโปรแกรมดู / โปรแกรมแก้ไขอื่น (เช่น Wordpad)


2
กำลังดูใน notepad :)
FacePalm

FYI ใน Notepad ++ คุณสามารถค้นหา "\\ n" แทนที่ "\ n" ทั้งหมดด้วยโหมดการค้นหา "Extended" ที่เลือกไว้ที่ด้านล่างของกล่องโต้ตอบ
Drew

95

ใช้ค่าคงที่ 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');
    });
   });
  });
 }

14
(1/2) โปรดทราบว่าเนื่องจาก node.js สามารถทำงานบนสภาพแวดล้อมที่แตกต่างกันจำนวนมากจึงอาจเป็นไปได้ที่จะย้ายแอปพลิเคชันของคุณจากสภาพแวดล้อมแบบ windows ไปเป็น linux นั่นหมายความว่าหากแอปพลิเคชันของคุณกำลังต่อท้ายบันทึกโดยใช้os.EOLคุณจะมีบางบรรทัดที่ลงท้ายด้วย/r/n(จากเวลาที่แอปทำงานบน windows) จากนั้นคุณจะมีแถวที่ลงท้ายด้วย/n(เมื่อแอปทำงานบน linux) ซึ่งอาจทำให้เกิดปัญหาโดยเฉพาะอย่างยิ่งหากมีการแยกวิเคราะห์ไฟล์บันทึกโดยอัตโนมัติ /nฉันตัดสินใจที่จะใช้เพียงแค่
Sharky

2
(2/2) อย่างไรก็ตามฉันยกระดับคำตอบของคุณเพราะมันจะเป็นคำตอบที่ถูกต้องหากเราอาศัยอยู่ในโลกที่มีการควบคุมที่สมบูรณ์แบบ
Sharky

1
ฉันใช้ linux แต่ชอบแนวทางนี้เพราะฉันอาจต้องการความสะดวกในการพกพาเพื่อใช้ในอนาคต
sdkks

1
นี่คือคำตอบที่ดีที่สุดเพราะทำงานข้ามแพลตฟอร์ม
Mike Chelen

ฉันต้องรวมแอปพลิเคชันที่ใช้fs.writeกับos.EOLไบนารี ฉันเคยpkgสร้างไบนารีสำหรับ Windows เมื่อดำเนินการบันทึกที่เขียนล่าสุดจะมีบรรทัดใหม่ต่อท้าย (ตามที่คาดไว้) แต่ดูเหมือนว่าแอปพลิเคชัน Windows อื่น ๆ ถือว่าเป็นสถิติใหม่ ฉันกำลังตามหาวิธีแก้ปัญหา
cogitoergosum

3

ใช้การ\r\nรวมกันเพื่อต่อท้ายบรรทัดใหม่ในโหนด js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.