Sasaran: memperpanjang yang sudah saya terapkan localStorage
di aplikasi saya, untuk menjadi baik, bukan lokal saya kira.
Saya suka penerapan penyimpanan pengaturan pengguna sederhana dengan API penyimpanan lokal. Saya memiliki ini berfungsi untuk kebutuhan saya di aplikasi web, tetapi satu-satunya masalah adalah itu lokal untuk mesin / browser yang sedang digunakan / disimpan. Saya tidak memiliki akses ke tabel gaya MySQL klasik untuk ini. Saya ingin memperluas atau menyesuaikan penyimpanan lokal saya untuk dibawa ke browser lain; atau menyimpan pengaturan pengguna saya di objek JS pengguna dan properti objek JS.
- Saya suka ide hanya membuat objek JSON atau JavaScript dengan setiap pengguna, setiap kali ada pengguna baru, mengambil nama, membuat objek atau
object[key]
dengan nama, dan memiliki properti bidang variabel default pada awalnya, dan variabel menjadi diisi dan atau diganti saat pengguna menyimpannya. - Atau jika hal di atas disukai; ingin menjaga implementasi penyimpanan lokal saya karena berfungsi dengan baik dan menemukan plugin / perpustakaan / ekstensi semacam itu yang memungkinkan saya untuk juga menyimpan ini dan merender ulang di lokasi yang berbeda; ini harus dipikirkan sebelumnya. Meskipun saya ingin menyimpannya di sisi klien; Saya terbuka untuk solusi node.js dan juga solusi python, jenis data sederhana harus cukup bekerja.
- Bagaimana dengan menghasilkan file dengan
localStorage
data saya ? Mungkin file .csv (ini bukan data sensitif) dan dimutakhirkan seperti yang sayalocalStorage
lakukan?
javascript
node.js
json
cookies
local-storage
liburan dok
sumber
sumber
Jawaban:
Bagaimana dengan menggunakan sqlite?
Hanya satu file di server Anda seperti csv. Mengirim permintaan http Untuk memperbaruinya menggunakan pernyataan SQL oleh knex atau sesuatu seperti itu setelah memperbarui penyimpanan lokal di sisi klien.
Setidaknya lebih baik daripada cvs saya pikir karena Anda dapat mendefinisikan beberapa tabel, yang lebih scalable, dan lebih efisien, Anda tahu, itu adalah database.
sumber
Saya menambahkan dua sen saya di sini.
Ekspor / Impor File (JSON, XML, CSV, TSV, dll.)
Ekspor:
Serialize pengaturan dan unduh sebagai file.
Impor:
Buka file pengaturan serial yang diekspor / diunduh.
Kode Contoh:
URL (String Kueri)
Ekspor:
Encode pengaturan ke string kueri, dan gabungkan dengan URL saat ini sebagai hyperlink.
Impor:
Kunjungi hyperlink yang berisi string kueri dengan pengaturan yang disandikan, kemudian JavaScript mendeteksi dan memuat pengaturan dari string kueri.
Base64 Data Yang Dienkripsi
Ekspor:
Serialize pengaturan kemudian encode sebagai string Base64, dan kemudian salin ke clipboard.
Impor:
Rekatkan string Base64 dari clipboard ke kotak teks untuk mendekode, deserialize dan memuat pengaturan.
Kode QR
Ekspor:
Encode pengaturan ke string kueri, dan gabungkan dengan URL saat ini sebagai hyperlink. Kemudian buat gambar dan tampilan kode QR.
Impor:
Pindai gambar kode QR yang dihasilkan dan kunjungi hyperlink secara otomatis.
Server HTTP (Node.js) / Penyimpanan Awan (AWS S3)
Ekspor:
HTTP POST untuk endpoint secara otomatis saat memperbarui nilai, berdasarkan id pengguna.
Impor:
HTTP DAPATKAN dari titik akhir oleh id pengguna.
Ekstra: PouchDB
sumber
Anda dapat menggunakan URL sebagai penyimpanan jika Anda mem-zip params pengguna Anda.
dapatkan params yang ingin Anda simpan> json> deflate> encode ke base64> dorong ke URL
onload: dapatkan params dari url> decode dari base64> inflate> parse json
https://jsfiddle.net/chukanov/q4heL8gu/44/
Param url akan cukup panjang, tetapi 10 kali lebih sedikit dari maksimum yang tersedia
sumber
Alih-alih menggunakan penyimpanan lokal, simpan pengaturan pengguna Anda di InterPlanetary File System (IPFS) https://ipfs.io/
Pada dasarnya, Anda akan meletakkan pengaturan mereka adalah format data seperti JSON dan kemudian menulisnya ke file dan mendorongnya ke IPFS.
Anda akan membutuhkan cara untuk mengidentifikasi data mana yang masuk ke pengguna yang mana. Mungkin Anda bisa menggunakan hash nama pengguna dan kata sandi untuk memberi nama file Anda atau sesuatu seperti itu. Maka pengguna Anda akan selalu dapat mengakses konten mereka di perangkat apa pun (asalkan mereka tidak lupa kata sandi mereka).
sumber
Anda dapat menggunakan pustaka yang disebut
localForage
yang pada dasarnya memiliki API yang sama sepertilocalStorage
kecuali itu memungkinkan Anda untuk menyimpan struktur data yang lebih kompleks (array, objek) dan juga mendukungnodejs
gaya panggilan balik, janji danasync
await
.Berikut ini tautan ke repositori tempat Anda dapat menemukan contoh penggunaan dan bagaimana menerapkannya dalam proyek sesuai keinginan Anda.
sumber
Cara terbaik untuk mengimplementasikan ini tanpa menggunakan database untuk berbagi data, saya percaya itu berbasis solusi WebRTC , saya menganggapnya sebagai cara untuk melakukan itu tetapi saya tidak memiliki kode untuk itu (setidaknya untuk saat ini), jadi dengan beberapa pencarian saya menemukan seseorang sudah melakukannya (tidak persis, tetapi dengan beberapa tweak akan siap) di sini misalnya, dan bagiannya dari artikel ini webrtc tanpa server pemberi sinyal
di sini adalah satu lagi sumber: demo contoh dasar saluran data
dan pada github: contoh dasar saluran data
WebRTC tidak hanya untuk obrolan video / audio, itu juga dapat digunakan dalam pesan teks dan kolaborasi dalam pengeditan teks.
Solusi ini bahkan disebutkan dalam salah satu jawaban di sini .
sumber
Gunakan cookie atau miliki file yang dapat diunduh yang dapat diambil pengguna untuk memuatnya saat mereka mengakses browser lain. Anda dapat melakukan ini dengan file teks, JSON, atau JavaScript dengan data objek.
sumber
Anda dapat menggunakan Redis . Ini adalah penyimpanan struktur data dalam memori, digunakan sebagai basis data. Anda dapat menyimpan data Anda dalam format pasangan kunci. Ini juga membuat aplikasi Anda cepat dan efisien.
sumber
Jelas pendekatan terbaik adalah menggunakan database. Namun, jika Anda cenderung menggunakan basis data maka pendekatan terbaik yang mungkin adalah menggunakan kombinasi teknik yang saya yakin sudah Anda sentuh sehingga saya akan membantu Anda menghubungkan titik-titik di sini.
Langkah-langkah yang Dibutuhkan:
Instruksi:
Anda akan menggunakan penyimpanan lokal Anda dengan cara yang sama seperti Anda menggunakannya sekarang (kondisi kerja saat ini).
Untuk memindahkan atau memiliki pengaturan pengguna di berbagai perangkat, file userSettings.JSON (berfungsi sebagai basis data dokumen) akan digunakan untuk menyimpan dan mengimpor pengaturan pengguna.
Titik akhir API Anda akan digunakan untuk MENDAPATKAN pengaturan pengguna jika tidak ada di localStorage. Pada pembaruan pengaturan, perbarui localStorage Anda dan kemudian POST / Perbarui pengaturan baru dalam file UserSettings.JSON Anda menggunakan titik akhir Anda.
Titik akhir API Anda hanya akan digunakan untuk memelihara (membaca dan menulis) file userSettings.JSON. Anda memerlukan metode / fungsi untuk membuat, memperbarui, dan mungkin menghapus pengaturan di file Anda. Seperti yang mungkin sudah Anda ketahui, format file JSON tidak jauh berbeda dari database MongoDB. Dalam hal ini Anda hanya menciptakan metode yang Anda butuhkan untuk mengelola file Anda.
Saya harap ini membantu!
sumber
Anda dapat menyelesaikan ini tanpa database, tetapi saya tidak akan merekomendasikannya. Pada dasarnya Anda memiliki (pengguna, localStorage) pasangan dan ketika pengguna yang diberikan mengidentifikasi dirinya sendiri, / localStorage nya harus disediakan dengan cara. Anda dapat memberi tahu pengguna untuk menyimpan penyimpanan lokal mereka di mesin mereka sendiri, tetapi kemudian mereka harus menyalinnya ke mesin lain, yang padat karya dan tidak akan pernah mendapatkan popularitas. Seseorang dapat secara manual menjalankan potongan Javascript di konsol browser mereka untuk memastikan bahwa localStorage memiliki data mereka dan harus menyalin mesin localStorage accross hanya sedikit lebih mudah daripada melakukan semuanya secara manual.
Anda dapat menempatkan informasi localStorage disandikan ke dalam URL, tetapi selain masalah panjang URL, yang mungkin menjadi masalah dan masalah penyandian yang selalu ada, seluruh localStorage Anda dapat dipantau oleh pihak ketiga, memiliki akses ke router Anda. Saya tahu Anda telah mengatakan bahwa data tidak sensitif, tapi saya percaya bahwa itu tidak peka belum . Tetapi begitu pengguna akan menggunakan ini, jika nyaman, mereka akan menyimpan data sensitif juga atau, klien Anda mungkin memiliki tugas seperti itu untuk Anda, atau bahkan Anda mungkin menyadari bahwa Anda perlu menyimpan data di sana yang tidak 100% bersifat publik.
Selain itu, dalam praktiknya Anda akan menghadapi masalah sinkronisasi yang sangat serius, yaitu, semuanya menyenangkan untuk menjadikan localStorage agnostik, tetapi kemudian, apa versi sebenarnya? Jika Anda secara teratur mengerjakan 10 sesi yang berbeda, maka menyinkronkan penyimpanan lokal menjadi masalah yang sulit. Ini berarti bahwa penyimpanan lokal perlu cap waktu.
Jadi, Anda akan membutuhkan tempat pusat, server untuk menyimpan versi localStorage yang terakhir disimpan. Jika Anda terhindar dari basis data karena beberapa alasan yang tidak diketahui, Anda dapat menyimpan penyimpanan lokal di dalam file yang mengidentifikasi pengguna, seperti
johndoe.json
dan kemudian, Anda perlu mengimplementasikan fitur ekspor, yang akan mengirim JSON pengguna saat ini ke server dan menyimpannya ke dalam file dan fitur impor, yang akan mengunduh file yang disimpan untuk pengguna dan memastikan bahwa penyimpanan lokal diperbarui demikian. Anda dapat melakukan keduanya bersama-sama, menerapkan sinkronisasi.
Sejauh ini masih sederhana, tetapi bagaimana jika pengguna sudah memiliki beberapa data yang berguna di dalam penyimpanan lokal dan di server juga? Pendekatan paling sederhana adalah menimpa satu dengan yang lain, tetapi yang mana? Jika kita mengimpor, maka yang lokal diganti, jika mengekspor, maka yang di server ditimpa, jika kita menyinkronkan, maka yang lebih tua ditimpa.
Namun, dalam beberapa kasus Anda ingin menggabungkan dua penyimpanan lokal dari pengguna yang sama, jadi:
elemen baru
Saya percaya bahwa jika suatu elemen baru, harus diketahui dengan cara tertentu bahwa elemen itu dibuat dalam sesi ini, yang berguna untuk diketahui, karena itu berarti bahwa pada sesi lain yang kami gabungkan, item baru ini tidak dihapus. dan karenanya intuitif untuk menambahkannya.
perubahan elemen
Jika elemen yang sama berbeda dalam dua kasus, maka versi yang lebih baru akan menang.
elemen yang dihapus
Kasus yang menarik adalah ketika dalam satu sesi telah dihapus dan yang lain telah diperbarui. Dalam hal ini saya pikir perubahan yang lebih baru harus menang.
Namun, terlepas dari upaya terbaik Anda, pengguna mungkin masih mengacaukan (dan perangkat lunak Anda juga) hal-hal, jadi membuat cadangan setiap sesi di server Anda masuk akal.
sumber