Gdzie przechowywać ustawienia użytkownika w aplikacji Electron (Atom Shell)?

82

Nie mogę znaleźć wbudowanego mechanizmu do przechowywania ustawień użytkownika. Miałem nadzieję, że firma electron zapewniła standardową metodę przechowywania ustawień użytkownika na wszystkich platformach komputerowych. Jeśli nie ma precedensu, mogę to wdrożyć samodzielnie, po prostu nie chciałem od razu przeskakiwać do niestandardowego rozwiązania. Badania online są dość rzadkie w tej dziedzinie. Dzięki!

CodeManiak
źródło
1
Zapisałem swoje ustawienia za pomocą localStorage, ale jestem bardzo zainteresowany, aby dowiedzieć się więcej o tym, jak to działa z Electron. Ponieważ wyczyszczenie localStorage jest kłopotliwe, a ponowna instalacja aplikacji Electron nie wydaje się jej wyczyścić.
E. Sundin

Odpowiedzi:

75

Każda platforma ma różne domyślne lokalizacje dla różnych rodzajów danych. Jeśli więc chcesz przechowywać dane w domyślnych lokalizacjach opartych na platformie, sprawdźapp.getPath(name)

Pobiera ścieżkę do specjalnego katalogu lub pliku skojarzonego z name.

Możesz go również użyć do rozróżnienia między danymi, które użytkownik chce zapisać, a danymi zapisanymi przez aplikację, które nie chcesz zaśmiecać katalogów użytkowników.

Lub jeśli chcesz po prostu przechowywać pliki ponownie w określonej ścieżce, możesz użyć rozszerzenia app.setPath(name,path)

Josh
źródło
Dokładnie to, czego szukałem, po prostu nie wiedziałem, że ta funkcja istnieje! Dzięki!
CodeManiak,
42

Spotkałem się z tym konkretnym problemem z moją aplikacją Electron i ten post zainspirował mnie do napisania modułu NPM o nazwie electron-json-storage .

Ten moduł umożliwia łatwe zapisywanie / odczytywanie JSON do / z 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"
    });

});
jviotti
źródło
electron-json-storagejest super, inny wybór tolowdb
JUO
6
Po prostu ciekawy, ale jaka jest korzyść z przechowywania elektronów json w porównaniu z just, var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))a fs.writeFileSync(path, JSON.stringify(someObj)});nawet ustawienie asynchronizacji nie dodałoby więcej niż kilka linii.
gman
3
Spójrz także na ustawienia elektronów .
k7sleeper
Świetny zasób. Chociaż wygląda na to, że biblioteka nie obsługuje natywnie obietnic, jak w przykładzie.
Keith Holliday
1
Każda dodana zależność to większa powierzchnia dla exploitów, kolejny fragment kodu, który musi być stale aktualizowany, a jeśli jesteś profesjonalnym programistą, musisz również przeprowadzić audyt kodu. Prawdopodobnie złą praktyką jest branie całej rozdętej biblioteki tylko w celu zastąpienia 2 linii kodu.
gman
15

Electron nie daje do tego niczego po wyjęciu z pudełka. Jednak Electron zapewnia metodę uzyskiwania idiomatycznej lokalizacji przechowywania danych użytkownika w sposób międzyplatformowy za pośrednictwem interfejsu API app.getPath .

Powiedziałbym, że 3 najczęstsze sposoby to:

  • localStorage (lub dowolny interfejs API magazynu HTML5)
  • płaski plik JSON (to właśnie robię i używam do tego sklepu elektronicznego )
  • wbudowana baza danych, taka jak IndexedDB, neDB lub sqlite

Który wybierzesz, będzie zależeć od potrzeb Twojej aplikacji. Jeśli potrzebujesz tylko dostępu do tych danych w procesie renderowania, po prostu użyłbym localStorage. W większości przypadków wydaje się, że potrzebujesz dostępu do danych zarówno w głównym, jak i rendererze, więc plik JSON ma sens. Jeśli masz do czynienia z dużą ilością danych lub złożonymi zapytaniami, być może baza danych ma sens. Dokładniej o tym pisałem tutaj .

ccnokes
źródło
5

A co z LocalStorage? Jeśli chcesz uzyskać dostęp do tych ustawień z procesu przeglądarki, prawdopodobnie musisz napisać własne (lub po prostu użyć biblioteki node.js, która to implementuje)

Ana Betts
źródło
1

Najlepszym sposobem, jaki znalazłem, jest zapisanie go w prostym pliku jako JSON. Problem polega na tym, że jeśli przechowujesz ten JSON w katalogu aplikacji, to po zaktualizowaniu aplikacji zostanie on usunięty. Więc chcesz umieścić go w domyślnym katalogu dla ustawień użytkownika dla bieżącego systemu operacyjnego. SZCZĘŚLIWIE!!!!! Istnieje biblioteka dla programistów węzłów, która pomoże Ci znaleźć katalog danych użytkownika. Moduł nosi nazwęappdirectory i używałem go kilka razy. Jest niezwykle łatwy w użyciu.

Zobacz APPDIRECTORY TUTAJ

mroźny
źródło
1
lub po prostugetPath(userData)
Dan