Де зберігати налаштування користувача у застосунку Electron (Atom Shell)?


82

Здається, я не можу знайти вбудований механізм для зберігання налаштувань користувача. Я сподівався, що електрон забезпечує стандартний метод зберігання налаштувань користувача на всіх платформах настільних ПК. Якщо для цього немає прецеденту, я можу його реалізувати сам, я просто не хотів негайно переходити до спеціального рішення. Дослідження в Інтернеті досить скупі у цій галузі. Дякую!


1
Я зберігав свої налаштування за допомогою localStorage, але мені дуже цікаво дізнатись більше про те, як це працює з Electron. Оскільки видаляти localStorage брудно, а перевстановлення програми Electron, здається, не очищає.
Е. Сундін,

Відповіді:


75

Кожна платформа має різні місця за замовчуванням для різних типів даних. Отже, якщо ви хочете зберігати дані в місцях за замовчуванням на основі платформи, перевіртеapp.getPath(name)

Він отримує шлях до спеціального каталогу або файлу, пов'язаного з name.

Ви також можете використовувати його для розмежування даних, які користувач хоче зберегти, та даних, які зберігає ваш додаток, і ви не хочете захаращувати каталоги користувачів.

Або якщо ви просто хочете зберегти файли, що відносяться до певного шляху, ви можете використовувати файл app.setPath(name,path)


Саме те, що я шукав, я просто не знав, що ця функція існує! Дякую!
CodeManiak

42

Я зіткнувся з цією особливою проблемою у своєму додатку Electron, і ця публікація надихнула мене на написання модуля NPM під назвою electron-json-storage .

Цей модуль дозволяє легко писати / читати JSON в / з app.getPath('userData'):

const storage = require('electron-json-storage');

// Write
storage.set('foobar', { foo: 'bar' }).then(function() {

    // Read
    storage.get('foobar').then(function(object) {
        console.log(object.foo);
        // will print "bar"
    });

});

electron-json-storageдивовижний, інший вибірlowdb
JUO

6
Просто цікаво, але в чому перевага електрон-json-сховища в порівнянні з справедливим var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))і fs.writeFileSync(path, JSON.stringify(someObj)});навіть тим, що його асинхронізація не додасть більше кількох рядків.
gman

3
Також подивіться на електронні налаштування .
k7sleeper

Чудовий ресурс. Хоча, схоже, бібліотека не підтримує обіцянки, як у вас у прикладі.
Кіт Холлідей

1
Кожна додана вами залежність - це більша площа поверхні для експлойтів, ще одна частина коду, яка повинна постійно оновлюватися, і якщо ви професійний розробник, вам також потрібно перевірити код. Це, мабуть, погана практика брати цілу роздуту бібліотеку, щоб замінити 2 рядки коду.
gman

15

Електрон не дає вам нічого з коробки за це. Однак Electron дає вам спосіб отримати ідіоматичне місце зберігання даних користувачів у крос-платформенному режимі через API app.getPath .

Я б сказав, що 3 найпоширеніші способи зробити це:

  • localStorage (або будь-який API зберігання HTML5)
  • плоский файл JSON (це те, що я роблю, і я використовую електронний магазин )
  • вбудована база даних, така як IndexedDB, neDB або sqlite

Який із них вибрати, буде залежати від потреб вашого додатка. Якщо вам потрібен доступ лише до цих даних у процесі візуалізації, я б просто використав localStorage. Здебільшого здається, що вам потрібен доступ до даних як в основному, так і в засобі візуалізації, тому файл JSON має сенс. Якщо ви маєте справу з великою кількістю даних або складними запитами, то, можливо, база даних має сенс. Про це я детальніше писав тут .


5

Як щодо LocalStorage? Якщо вам потрібен доступ до цих налаштувань із процесу браузера, вам, мабуть, потрібно написати власний (або просто скористатися бібліотекою node.js, яка це реалізує)


1

Найкращий спосіб, який я знайшов, - це зберігати його у простому файлі як JSON. Проблема полягає в тому, що якщо ви збережете цей файл JSON у папці програми, тоді, коли ви оновите програму, вона буде знищена. Отже, ви хочете помістити його в каталог за замовчуванням для налаштувань користувача для поточної операційної системи. ВДАЧА !!!!! Існує бібліотека для розробників вузлів, яка допоможе вам знайти каталог користувацьких даних. Модуль викликається appdirectory, і я використовував його кілька разів. Він надзвичайно простий у використанні.

Дивіться ДОПОВІДНИК ТУТ


1
або простоgetPath(userData)
Ден

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.