Як додати новий рядок у Node.js


94

Я намагаюся додати дані до файлу журналу за допомогою 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?
Фрогц

Відповіді:


153

Схоже, ви використовуєте це в Windows (враховуючи H://log.txtшлях до вашого файлу).

Спробуйте використовувати \r\nзамість просто \n.

Чесно кажучи, \nчудово; ви, напевно, переглядаєте файл журналу в блокноті або щось інше, що не відображає нові рядки, що не належать до Windows. Спробуйте відкрити його в іншому засобі перегляду / редакторі (наприклад, Wordpad).


2
переглядав у блокноті :)
FacePalm

FYI в Notepad ++ ви можете знайти все "\\ n" замінити "\ n" на "Розширений" режим пошуку, вибраний внизу діалогового вікна.
Дрю

91

Замість цього використовуйте константу 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');
    });
   });
  });
 }

13
(1/2) Зверніть увагу, що оскільки node.js може працювати в багатьох різних середовищах, можливо, можливо перенести ваш додаток із, скажімо, середовища Windows, на Linux. це означає, що якщо ваша програма додає журнали за допомогою, у os.EOLвас буде кілька рядків, що закінчуються на /r/n(з часу запуску програми у Windows), а потім у вас будуть рядки, що закінчуються буквами на /n(коли програма працює на Linux). Це може створити певні проблеми, особливо якщо існує автоматичний аналіз файлів журналів. Я вирішив просто використовувати /n.
Шаркі

1
(2/2) Тим не менше, я підтримав вашу відповідь, оскільки вона була б правильною, якби ми жили в досконало регульованому світі.
Шаркі

Я використовую Linux, але мені сподобався такий підхід, оскільки, можливо, я хочу переносимість у майбутньому.
sdkks

Це найкраща відповідь, оскільки вона працює на різних платформах.
Mike Chelen

Ну, мені довелося упакувати додаток, який використовувався fs.writeз, os.EOLу двійковий файл. Раніше я pkgстворював двійковий файл для Windows. Після виконання останнього письмового запису до нього додається новий рядок (як очікувалося); але, схоже, інші програми Windows розглядають це новий запис. Я полюю на обхід.
cogitoergosum

0

використовувати \r\nкомбінацію, щоб додати новий рядок у js-вузлі

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.