Синхронизация константа и JSON базы

190
23 июня 2022, 16:30

Я хочу, чтобы данные в константе или объекте обновлялись, т.е. я меняю конфиги в JSON базе, скрипт схватывает и обновляет данные в константе или объекте. Пробовал const на let заменять, но это глупо и бесполезно. Я хочу обновлять данные константа или объекта из JSON базы не перезапуская скрипт. Скажу сразу с JSON базы на SQL и другие переходить желания нет.

let configs = null
let addition = null
let realties = null
let estates = null
setInterval(() => {
   configs = require("./configs.json")
   addition = require("./addition.json")
   realties = addition.realties
   estates = addition.estates
 }, 6000)
Answer 1

Вам нужно следить за файлом с помощью fs.watchFile

Если что-то копирует конфиг к себе нужно оповистить тот код об изменениях

Можно сделать оповещение через eventEmmiter класс

Answer 2

Можно оставить const. Но тогда обновлять придется так:

const configs = {} // не null, а {}
console.log(configs);
Object.assign(configs, {
  my: 'config',
  addition: '123'
});
console.log(configs);
Object.assign(configs, {
  my: 'config',
  config: 'my',
  addition: '123'
});
console.log(configs);

Обновления ФС, как уже написали, делаете с fs.watchFile, а чтение можно сделать и через fs.readFile, но не забыв распарсить JSON.parse:

const configs = require('./configs'); // первый раз можно и с require
// а все последующие разы require будет возвращать одно и тоже
// независимо от того, менялся конфиг или нет
fs.watchFile("./configs.json", ()=>{
   fs.readFile("./configs.json", "utf8", (file)=>{
      Object.assign(configs, JSON.parse(file));
   }
})
Answer 3

Способ от пользователя DiD и Ghost мало чем помог, ибо у меня не работало. Я написал своё, вот пример:

const base = require("./base.json"); // ваш путь к JSON-файлу или базе
setInteval(()=>{
   const prebase = fs.readFileSync("./base.json"); // читаем файл JSON, здесь нам выдаст шифованный или двоичный код
   Object.assign(base, JSON.parse(prebase)) //JSON.parse переведет прочитанные данные в нормальный JSON, т.е. не двоичный, и перезапишет данные в объекте base на новые
   console.log('okay! синхронизация базы завершена!') // сообщение все успешно прошло
},15000) // обновляет данные каждые 15000 миллисекунд, т.е. 15 секунд```
READ ALSO
Деплой Static Nuxt project

Деплой Static Nuxt project

Скажите, пожалуйста, сделал landing page для бизнеса на Nuxt, теперь не знаю как это все положить на хостингМогу положить на Netlify, но мне нужно с красивым...

224
Функция выравнивания строки на JavaScript

Функция выравнивания строки на JavaScript

Столкнулась с такой задачей, помогите пожалуйста!!

223
React, проблема с обновлением состояния

React, проблема с обновлением состояния

Я пытаюсь создать кнопку которая будет перемешивать плейлист(массив объектов), а по второму клику возвращать не перемешанный плейлистПочему-то...

288
Относительный путь к другой странице

Относительный путь к другой странице

Встретился с такой проблемой - не могу верно указать путь до второй страницы,самый простой шаг(выйти из той папки, где лежит основная страница...

237