У меня есть следующие 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, когда сохраняется?