Как добавить в новую строку в 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');
    });
   });
  });
 }
DaBears
источник
4
Вы на Windows / с использованием Windows , на основе текстового редактора , чтобы просмотреть файл, и , таким образом , нужна пара CRLF, \r\n?
Phrogz

Ответы:

158

Похоже, вы запускаете это в Windows (учитывая H://log.txtпуть к вашему файлу).

Попробуйте использовать \r\nвместо просто \n.

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

Роб Хруска
источник
2
просматривал в блокноте :)
FacePalm
К вашему сведению, в Notepad ++ вы можете найти все «\\ n», заменив «\ n» на «Расширенный» режим поиска, выбранный в нижней части диалогового окна.
Дрю
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 01
1
Это лучший ответ, потому что он работает на разных платформах.
Майк Челен
Что ж, мне пришлось упаковать приложение, которое использовалось fs.writeс, os.EOLв двоичный файл. Раньше я pkgсоздавал двоичный файл для Windows. При выполнении к последней записанной записи добавляется новая строка (как и ожидалось); но, похоже, другие приложения Windows относятся к этому новому рекорду. Я ищу обходной путь.
cogitoergosum
3

используйте \r\nкомбинацию, чтобы добавить новую строку в node js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Codemaker
источник