Невозможно сделать операцию fs.write в некоторых папках - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь создать структуру, похожую на базу данных, используя файлы json в качестве системы хранения, и я разработал метод в утилитарном классе, чтобы помочь с этим, однако я не могу использовать его в зависимости от пути к местуЯ хочу написать в.

Я установил, что метод работает, но только в некоторых путях, я знаю, что путь правильный каждый раз, но некоторые пути просто оставляют программу зависшей;не выдает никаких ошибок и даже журналов отладки, которые я оставил.

Вот метод, который сохраняет объект по выбранному пути.

    /*
    ** Saves `file` object into `path`.
    ** Will attempt backup first, and may reload a backup on errors
    */
    save: function(path, file) {
        this.backup(path, file, () => {
            FS.writeFile(path, JSON.stringify(file), (err) => {
                if (err) {
                    this.log(err, this.LogTypes.ERROR);
                    this.log(`Something wrong happened, FS.writeFile operation on '${path}' failed!`, this.LogTypes.ERROR);
                    if (FS.existsSync(`${path}.bak`)) {
                        this.log(`Reverting '${path}' to backup!`, this.LogTypes.DATABASE);
                        FS.copyFile(`${path}.bak`, `${path}`, (err) => {
                            if (err) {
                                this.log(err, this.LogTypes.ERROR);
                                this.log(`Unable to restore backup from '${path}.bak'! '${path} may have been corrupted or destroyed!'`, this.LogTypes.ERROR);
                            } else this.log(`'${path}' has been restored to the latest backup successfully.`, this.LogTypes.DATABASE);
                        });
                    } else this.log(`Backup for '${path}' was not found, cannot restore backup!\nPlease make sure that ${path} is not damaged, or is an operation-critical file, and restart the bot.`, this.LogTypes.ERROR);
                } else {
                    this.log(`'${path}' has been saved successfully!`, this.LogTypes.DATABASE);
                }
            });
        });
    }

Его реализация в коде осуществляется посредством использованияиз Utils.save("path"; Object)

...