Следите за изменениями в текстовом файле, и обрабатывать, когда этот файл не существует - PullRequest
0 голосов
/ 22 апреля 2020

Я недавно делал проект, и мне нужно проверить наличие нового текста в текстовом файле. Мой код был такой:

const fs = require('fs');

fs.watch('./file.txt', (event, filename) => {
    fs.readFile('./file.txt', (err, data) => {
         if (err) throw err;
         data = JSON.parse(data);

         console.log(data);
    }
}

Он работал отлично. Однако иногда я должен удалить этот файл по тем или иным причинам, и поэтому мой код тоже дает сбой!

Есть идеи, как с этим справиться? Спасибо за ваши ответы

1 Ответ

0 голосов
/ 22 апреля 2020

Встроенный модуль Node fs не очень хорошо поддерживает обнаружение удаления файлов. Существует обходной путь, использующий пакет под названием nsfw , который является оберткой вокруг собственной библиотеки, которая обеспечивает гораздо лучшую поддержку для обнаружения удаления. API немного странный, но, тем не менее, это пакет solid.

Вот пример того, что вы пытаетесь сделать с помощью nsfw.

const nsfw = require("nsfw");
const path = require("path");
const fs = require("fs");

const file = path.join(__dirname, "file.txt");
let watcher;
nsfw(
    file,
    ([event, ...restEvents]) => {
        switch (event.action) {
            case nsfw.actions.DELETED: {
                watcher.stop();
                return; // or handle this however you need to..
            }
            default: {
                fs.readFile(file, (err, data) => {
                    if (err) throw err;

                    try {
                        data = JSON.parse(data);

                        console.log(data);
                    } catch (error) {
                        console.error(error)
                    }
                });
            }
        }
    }
)
.then((w) => {
    watcher = w;
    watcher.start()
});

...