Почему Node.js writeFile иногда записывает поврежденный файл JSON с JSON .stringify? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующие Node.js файлы для эмуляции localStorage в шаблоне адаптера:

localStorage. js:

const { writeFile, existsSync, readFileSync, unlik, unlink } = require('fs');

class LocalStorage {

    constructor() {
        if (existsSync('localStorage.json')) {
            console.log('Loading items from localStorage.json');
            const txt = readFileSync('localStorage.json');
            this.items = JSON.parse(txt);
        } else {
            this.items = {};
        }
    }

    get length() {
        return Object.keys(this.items).length;
    }

    getItem(key) {
        return this.items[key];
    }

    setItem(key, value) {
        this.items[key] = value;
        writeFile('localStorage.json', JSON.stringify(this.items), error => {
            if (error) {
                console.error(error);
            }
        });
    }

    clear() {
        this.items = {};
        unlink('localStorage.json', () => {
            console.log('localStorage file removed');
        });
    }
}

module.exports = new LocalStorage();

local . js:

const localStorage = require('./localStorage');

console.log( "localStorage length: ", localStorage.length );

var uid = localStorage.getItem("user_id");

console.log( "user_id: ", uid );

if (!uid) {
    console.log('User ID not found. Setting the user id and token...');
    localStorage.setItem("token", "TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ");
    localStorage.setItem("user_id", "12345");
} else {
    console.log('User ID found.', uid);
    console.log('clearning the User ID...');
    localStorage.clear();
}

Код работает, сохраняя и удаляя файл localStorage.json, но иногда (примерно в 50% случаев) он сохраняет JSON в поврежденном формате. , например,

{"token":"TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"}"user_id":"12345"}

вместо:

{"token":"TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ","user_id":"12345"}

Как я могу предотвратить такое повреждение файла JSON, когда сохраняется?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...