Cel: rozszerzenie mojej już zaimplementowanej localStorage
w mojej aplikacji, aby być dobrze, chyba lokalnie.
Podoba mi się implementacja zapisywania prostych ustawień użytkownika za pomocą interfejsu API lokalnego magazynu. Mam to działa na moje potrzeby w aplikacji internetowej, ale jedynym problemem jest to, że lokalny jest używany / zapisany komputer / przeglądarka. Nie mam do tego dostępu do klasycznej tabeli w stylu MySQL. Chciałbym rozszerzyć lub dostosować moją lokalną pamięć do innych przeglądarek; lub zapisz moje ustawienia użytkownika w obiektach JS użytkownika i właściwościach obiektu JS.
- Podoba mi się pomysł tworzenia po prostu obiektów JSON lub JavaScript dla każdego użytkownika, ilekroć jest nowy użytkownik, weź nazwę, utwórz obiekt lub
object[key]
z nazwą i najpierw ustaw domyślne właściwości pola, a zmienne zostaną zapełnione i lub zastępowane, gdy użytkownik je zapisuje. - Lub jeśli powyższe jest niezadowolone; chciałbym zachować moją implementację localstorage, ponieważ działa ona tak dobrze, i znaleźć wtyczkę / bibliotekę / rozszerzenie, które pozwala mi również zapisać to i ponownie renderować w różnych lokalizacjach; trzeba o tym pomyśleć wcześniej. Chociaż chciałbym zachować to po stronie klienta; Jestem otwarty na rozwiązanie node.js, a także rozwiązanie python, prosta ramka danych powinna działać wystarczająco dobrze.
- Co z generowaniem pliku z moimi
localStorage
danymi? Być może plik .csv (to nie są dane wrażliwe) i czy ma aktualizować tak jak mójlocalStorage
?
javascript
node.js
json
cookies
local-storage
doc wakacje
źródło
źródło
Odpowiedzi:
Co z użyciem sqlite?
Tylko jeden plik na serwerze, np. Csv. Wysyłanie żądania http Aby zaktualizować go za pomocą instrukcji SQL za pomocą knex lub czegoś podobnego po zaktualizowaniu magazynu lokalnego po stronie klienta.
Myślę, że przynajmniej lepiej niż cvs, ponieważ możesz zdefiniować kilka tabel, które są bardziej skalowalne i wydajniejsze, wiesz, to baza danych.
źródło
Dodam tutaj moje dwa centy.
Eksportuj / importuj plik (JSON, XML, CSV, TSV itp.)
Eksport:
Serializuj ustawienia i pobierz je jako plik.
Import:
Otwórz wyeksportowany / pobrany plik ustawień serializowanych.
Przykładowy kod:
URL (ciąg zapytania)
Eksport:
Zakoduj ustawienia w ciągu zapytania i połącz z bieżącym adresem URL jako hiperłączem.
Import:
Odwiedź hiperłącze zawierające ciąg zapytania z zakodowanymi ustawieniami, a następnie JavaScript wykrywa i ładuje ustawienia z ciągu zapytania.
Dane zakodowane w standardzie Base64
Eksport:
Ustawienia serializacji następnie zakoduj jako ciąg Base64, a następnie skopiuj do schowka.
Import:
Wklej ciąg Base64 ze schowka do pola tekstowego, aby dekodować, deserializować i ładować ustawienia.
Kod QR
Eksport:
Zakoduj ustawienia w ciągu zapytania i połącz z bieżącym adresem URL jako hiperłączem. Następnie wygeneruj obraz i wyświetl kod QR.
Import:
Zeskanuj wygenerowany obraz kodu QR i automatycznie odwiedź hiperłącze.
Serwer HTTP (Node.js) / Cloud Storage (AWS S3)
Eksport:
POST HTTP do punktu końcowego automatycznie podczas aktualizacji wartości według identyfikatora użytkownika.
Import:
HTTP GET z punktu końcowego według identyfikatora użytkownika.
Dodatkowo: PouchDB
źródło
Możesz użyć adresu URL jako miejsca do przechowywania, jeśli spakujesz parametry użytkownika.
pobierz parametry, które chcesz zapisać> json> deflate> koduj do base64> wciśnij w adres URL
onload: pobierz parametry z adresu URL> dekoduj z base64> inflate> parsuj json
https://jsfiddle.net/chukanov/q4heL8gu/44/
Adres URL będzie dość długi, ale dostępny 10 razy mniej niż maksimum
źródło
Zamiast używać localstorage, przechowuj ustawienia użytkownika w Międzyplanetarnym Systemie Plików (IPFS) https://ipfs.io/
Zasadniczo umieściłbyś ich ustawienie w formacie danych, takim jak JSON, a następnie zapisałeś je do pliku i wypychałeś do IPFS.
Będziesz potrzebował sposobu na określenie, które dane trafiają do którego użytkownika. Może możesz użyć skrótu nazwy użytkownika i hasła, aby nazwać swoje pliki lub coś w tym rodzaju. Wówczas użytkownik zawsze będzie mógł uzyskać dostęp do swoich treści na dowolnym urządzeniu (o ile nie zapomni swojego hasła).
źródło
Możesz użyć biblioteki o nazwie,
localForage
która ma w zasadzie ten sam interfejs API,localStorage
z wyjątkiem tego, że pozwala przechowywać bardziej złożone struktury danych (tablice, obiekty), a także obsługujenodejs
styl wywołania zwrotnego, obietnic iasync
await
.Oto link do repozytorium, w którym można znaleźć przykładowe zastosowania i jak zaimplementować je w swoim projekcie tak, jak lubisz.
źródło
Najlepszym sposobem na wdrożenie tego bez użycia bazy danych do udostępniania danych, uważam, że jest to oparte na rozwiązaniu WebRTC , pomyślałem o tym, ale nie mam do tego kodu (przynajmniej na razie), więc z niektóre wyszukiwania znalazłem, że ktoś już to zrobił (nie do końca, ale z pewnymi poprawkami będzie gotowy) tutaj, na przykład, a jego część tego artykułu webrtc bez serwera sygnalizacyjnego
oto jeszcze jedno źródło: przykładowa demonstracja podstawowego kanału danych
i na github: podstawowy przykład kanału danych
WebRTC służy nie tylko do czatu wideo / audio, ale może być również wykorzystywany do wysyłania wiadomości tekstowych i współpracy przy edycji tekstu.
To rozwiązanie wspomniano nawet w jednej z odpowiedzi tutaj .
źródło
Używaj plików cookie lub pobierz plik, który użytkownicy mogą zabrać ze sobą, aby załadować, gdy uzyskują dostęp do innej przeglądarki. Możesz to zrobić za pomocą pliku tekstowego, JSON lub JavaScript z danymi obiektowymi.
źródło
Możesz użyć Redis . Jest to magazyn struktur danych w pamięci, używany jako baza danych. Możesz przechowywać swoje dane w formatach par kluczy. Dzięki temu aplikacja jest szybka i wydajna.
źródło
Oczywiście najlepszym rozwiązaniem jest użycie bazy danych. Jeśli jednak masz skłonność do korzystania z bazy danych, najlepszym możliwym podejściem jest użycie kombinacji technik, które, jak sądzę, już się dotknąłeś, więc pomogę ci połączyć kropki tutaj.
Potrzebne kroki:
Instrukcje:
Używałbyś swojego localStorage w taki sam sposób, jak teraz go używasz (aktualny stan pracy).
Aby przenieść lub skonfigurować ustawienia użytkownika na różnych urządzeniach, plik userSettings.JSON (służący jako baza danych dokumentów) będzie używany do przechowywania i importowania ustawień użytkownika.
Twój punkt końcowy interfejsu API byłby używany do GET ustawienia użytkownika, jeśli nie istnieją w localStorage. Po aktualizacji ustawień zaktualizuj localStorage, a następnie POST / UPDATE nowe ustawienia w pliku userSettings.JSON przy użyciu punktu końcowego.
Punkt końcowy interfejsu API będzie używany tylko do obsługi (odczytu i zapisu) pliku userSettings.JSON. Będziesz potrzebował metody / funkcji do tworzenia, aktualizowania i być może usuwania ustawień w swoim pliku. Jak zapewne wiesz, format pliku JSON niewiele różni się od bazy danych MongoDB. W tym przypadku po prostu tworzysz metody potrzebne do zarządzania plikiem.
Mam nadzieję, że to pomoże!
źródło
Możesz rozwiązać ten problem bez bazy danych, ale nie poleciłbym tego. Zasadniczo masz pary (użytkownik, localStorage), a gdy dany użytkownik się zidentyfikuje, jego localStorage należy podać w sposób. Możesz powiedzieć użytkownikom, aby przechowali swoje lokalne magazyny na własnym komputerze, ale wtedy będą musieli skopiować je na inne maszyny, co jest pracochłonne i nigdy nie zyska popularności. Można ręcznie uruchomić fragment Javascript w konsoli przeglądarki, aby upewnić się, że localStorage ma swoje dane, a konieczność skopiowania localStorage na różne maszyny jest tylko nieznacznie łatwiejsza niż zrobienie tego ręcznie.
Możesz umieścić informacje localStorage zakodowane w adresie URL, ale oprócz problemu z długością adresu URL, który może stać się problemem i wciąż występującymi problemami z kodowaniem, całe localStorage może być monitorowane przez stronę trzecią, mającą dostęp do routera. Wiem, że powiedział, że dane te nie są wrażliwe, ale wierzę, że to nie jest wrażliwy jeszcze . Ale gdy użytkownicy skorzystają z tego, jeśli będzie to wygodne, będą również przechowywać poufne dane lub, Twoi klienci mogą mieć dla ciebie takie zadania, a nawet możesz zdać sobie sprawę, że musisz przechowywać dane, które nie są w 100% publiczne.
Poza tym w praktyce napotkasz bardzo poważne problemy z synchronizacją, to znaczy, że fajnie jest sprawić, że localStorage będzie agnostyczny, ale jaka jest prawdziwa wersja? Jeśli regularnie pracujesz nad 10 różnymi sesjami, synchronizacja localStorages staje się trudnym problemem. Oznacza to, że localStorage wymaga znacznika czasu.
Potrzebujesz więc centralnego miejsca, serwera do przechowywania ostatnio zapisanej wersji localStorage. Jeśli bazy danych unikają z jakichś niewiadomych powodów, możesz przechowywać localStorages w plikach identyfikujących użytkownika, takich jak
johndoe.json
a następnie musisz zaimplementować funkcję eksportu, która wyśle bieżący kod JSON użytkownika na serwer i zapisze go w pliku oraz funkcję importu, która pobierze plik przechowywany dla użytkownika i zapewni aktualizację localStorage odpowiednio. Możesz zrobić oba razem, implementując synchronizację.
Jak dotąd jest to proste, ale co zrobić, jeśli użytkownik ma już jakieś przydatne dane w swoim lokalnym localStorage i na serwerze? Najprostszym podejściem jest ominięcie siebie, ale które? Jeśli importujemy, to lokalny jest nadpisywany, jeśli eksportujemy, to ten na serwerze jest nadpisywany, jeśli synchronizujemy, starsze jest nadpisywane.
Jednak w niektórych przypadkach chcesz scalić dwa lokalne Magazyny tego samego użytkownika, więc:
nowe elementy
Uważam, że jeśli element jest nowy, należy w pewien sposób wiedzieć, że został utworzony w tej sesji, co warto wiedzieć, ponieważ oznacza to, że w innej sesji, z którą się łączymy, ten nowy element nie został usunięty i dlatego dodawanie go jest intuicyjne.
zmiany elementów
Jeśli ten sam element jest inny w obu przypadkach, wówczas powinna obowiązywać nowsza wersja.
usunięte elementy
Ciekawym przypadkiem jest to, że w jednej sesji został on usunięty, aw drugiej zaktualizowany. W tym przypadku myślę, że nowsza zmiana powinna mieć pierwszeństwo.
Jednak pomimo dołożenia wszelkich starań użytkownicy mogą nadal popsuć (i oprogramowanie również) rzeczy, więc tworzenie kopii zapasowej każdej sesji na serwerze ma sens.
źródło