Puoi risolverlo senza un database, ma non lo consiglierei. Fondamentalmente hai coppie (utente, archivio locale) e quando un determinato utente si identifica, il suo archivio locale dovrebbe essere fornito in un certo modo. Puoi dire agli utenti di archiviare i loro archivi locali sulla propria macchina, ma poi dovranno copiarli su altre macchine, che sono ad alta intensità di lavoro e non guadagneranno mai popolarità. Si potrebbe eseguire manualmente un blocco Javascript nella console del proprio browser per assicurarsi che localStorage abbia i propri dati e che dover copiare localStorage attraverso le macchine sia solo leggermente più semplice che fare manualmente tutto.
È possibile inserire le informazioni localStorage codificate in un URL, ma oltre al problema della lunghezza dell'URL, che potrebbe diventare un problema e i problemi di codifica sempre presenti, l'intero localStorage può essere monitorato da una terza parte, con accesso al router. So che hai detto che i dati non sono sensibili, ma ti credo che non siano ancora sensibili . Ma una volta che gli utenti lo useranno, se è conveniente, memorizzeranno anche i dati sensibili o, i tuoi clienti potrebbero avere tali compiti per te, o potresti anche renderti conto che devi archiviare lì dati che non sono pubblici al 100%.
Oltre a questi, in pratica affronterai seri problemi di sincronizzazione, ovvero è bello rendere agnostico localStorage, ma qual è la versione reale? Se lavori regolarmente su 10 sessioni diverse, la sincronizzazione degli archivi locali diventa un problema difficile. Ciò significa che localStorage deve essere timestamp.
Quindi, avrai bisogno di un posto centrale, un server per archiviare l'ultima versione salvata localStorage. Se si è evitati dai database per alcuni motivi sconosciuti, è possibile memorizzare localStorage all'interno di file che identificano l'utente, come
johndoe.json
e quindi, dovrai implementare una funzione di esportazione, che invierà l'attuale JSON dell'utente al server e lo salverà in un file e una funzione di importazione, che scaricherà il file archiviato per l'utente e assicurerà che localStorage venga aggiornato di conseguenza. Puoi anche fare le due cose insieme, implementando una sincronizzazione.
Questo è semplice finora, ma cosa succede se l'utente ha già alcuni dati utili all'interno del suo archivio locale locale e sul server? L'approccio più semplice è quello di sovrascrivere l'uno con l'altro, ma quale? Se stiamo importando, quello locale viene sovrascritto, se si esporta, quindi quello sul server viene ignorato, se sincronizziamo, il precedente viene ignorato.
Tuttavia, in alcuni casi si desidera unire due archivi locali dello stesso utente, quindi:
nuovi elementi
Credo che se un elemento è nuovo, dovrebbe essere noto in qualche modo che è stato creato in questa sessione, il che è utile sapere, perché ciò significa che nell'altra sessione con cui ci stiamo unendo, questo nuovo elemento non è stato rimosso e quindi è intuitivo aggiungerlo.
l'elemento cambia
Se lo stesso elemento è diverso nei due casi, dovrebbe prevalere la versione più recente.
elementi rimossi
Il caso interessante è quando in una sessione è stato rimosso e nell'altra è stato aggiornato. In questo caso, penso che dovrebbe prevalere il cambiamento più recente.
Tuttavia, nonostante i tuoi migliori sforzi, gli utenti potrebbero comunque fare confusione (e anche il tuo software), quindi il backup di ogni sessione sul tuo server ha senso.