Node WritableStream не работает напрямую - PullRequest
0 голосов
/ 02 ноября 2018

Я пишу в файл журнала my.log, используя writestream fs.createWriteStream('my.log', {flags: 'a'}).

В то же время у меня есть другой фрагмент кода, который использует fs.createReadStream() для чтения файла my.log, однако, этот, похоже, не получает обновления, как только файл журнала записывается. Только когда я вручную открываю и закрываю файл в моей ОС (windows), он запускается.

Что мне сделать, чтобы этот триггер произошел мгновенно? Должен ли я снова открывать и закрывать писательский поток, как:

var strm = fs.createWriteStream('my.log', {flags: 'a'})
// log my data
strm.close();
// rinse and repeat

1 Ответ

0 голосов
/ 02 ноября 2018

Похоже, это сводится к проблеме в узле / Windows:

  • "fs.watch API не на 100% согласован на разных платформах и в некоторых ситуациях недоступен"
  • "В системах Windows эта функция зависит от ReadDirectoryChangesW."

https://nodejs.org/api/fs.html#fs_availability

Итак, в качестве решения, я сейчас использовал:

// https://www.npmjs.com/package/tail
var Tail = require('tail').Tail;
// Pass property to force the usage of fs.watchFile
tail = new Tail('my.log', { useWatchFile: true });

Если вы не хотите использовать пакет «tail», вам следует вручную использовать fs.watchFile и действовать соответствующим образом при изменении файла.

...