Cách thêm vào Dòng mới trong Node.js


94

Tôi đang cố gắng Nối dữ liệu vào tệp Nhật ký bằng Node.js và điều đó đang hoạt động tốt nhưng nó không chuyển sang dòng tiếp theo. \ndường như không hoạt động trong chức năng của tôi bên dưới. Bất kỳ đề xuất?

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
Bạn đang sử dụng Windows / đang sử dụng trình soạn thảo văn bản dựa trên Windows để xem tệp của mình và do đó cần một cặp CRLF \r\n,?
Phrogz

Câu trả lời:


153

Có vẻ như bạn đang chạy phần mềm này trên Windows (với H://log.txtđường dẫn tệp của bạn ).

Hãy thử sử dụng \r\nthay vì chỉ \n.

Thành thật mà nói, \nlà tốt; có thể bạn đang xem tệp nhật ký trong notepad hoặc thứ gì đó khác không hiển thị các dòng mới không phải Windows. Hãy thử mở nó trong một trình xem / trình chỉnh sửa khác (ví dụ: Wordpad).


2
đang xem trong notepad :)
FacePalm

FYI trong Notepad ++, bạn có thể tìm thấy tất cả "\\ n" thay thế "\ n" bằng chế độ tìm kiếm "Mở rộng" được chọn ở cuối hộp thoại.
Drew

91

Sử dụng hằng số os.EOL để thay thế.

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

13
(1/2) Xin lưu ý rằng vì node.js có thể chạy trên nhiều môi trường khác nhau, nên có thể chuyển ứng dụng của bạn từ môi trường windows sang linux. điều đó có nghĩa là nếu ứng dụng của bạn đang bổ sung nhật ký bằng cách sử dụng, os.EOLbạn sẽ có một số dòng kết thúc bằng /r/n(từ thời điểm ứng dụng chạy trên windows) và sau đó bạn sẽ có các hàng kết thúc bằng /n(khi ứng dụng chạy trên linux). Điều này có khả năng gây ra một số rắc rối, đặc biệt nếu có bất kỳ phân tích cú pháp tự động nào đối với các tệp nhật ký. Tôi quyết định chỉ sử dụng /n.
Sharky

1
(2/2) Tuy nhiên, tôi đã ủng hộ câu trả lời của bạn vì nó sẽ là câu đúng, nếu chúng ta sống trong một thế giới được quản lý hoàn hảo.
Sharky

Tôi sử dụng linux nhưng thích cách tiếp cận này vì tôi có thể muốn tính di động khi sử dụng trong tương lai.
sdkks

Đây là câu trả lời tốt nhất vì nó hoạt động chéo.
Mike Chelen

Chà, tôi phải đóng gói một ứng dụng được sử dụng fs.writevới os.EOLthành một tệp nhị phân. Tôi đã từng pkgtạo một tệp nhị phân cho Windows. Khi được thực thi, bản ghi được viết cuối cùng có một dòng mới được nối vào nó (như mong đợi); nhưng, có vẻ như các ứng dụng Windows khác coi đó là một kỷ lục mới. Tôi đang tìm kiếm một công việc xung quanh.
cogitoergosum

0

sử dụng \r\nkết hợp để nối một dòng mới trong nút js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.