Objectif: étendre mon déjà implémenté localStorage
dans mon application, pour être bien, non local je suppose.
J'aime l'implémentation de l'enregistrement de paramètres utilisateur simples avec l'API de stockage local. J'ai ce travail pour mes besoins dans une application web, mais le seul problème est qu'il est local sur cette machine / navigateur utilisé / enregistré. Je n'ai pas accès à une table de style MySQL classique pour cela. Je souhaite étendre ou adapter mon stockage local pour le transférer vers d'autres navigateurs; ou stocker mes paramètres utilisateur dans les objets JS utilisateur et les propriétés d'objet JS.
- J'aime l'idée de simplement créer des objets JSON ou JavaScript avec chaque utilisateur, chaque fois qu'il y a un nouvel utilisateur, prenez le nom, créez un objet ou
object[key]
avec le nom, et avoir les propriétés par défaut des variables de champ au début, et les variables sont remplies et ou remplacé lorsque l'utilisateur les enregistre. - Ou si ce qui précède est mal vu; aimerait conserver mon implémentation de stockage local car elle fonctionne si bien et trouver un plugin / bibliothèque / extension d'une sorte qui me permette également de l'enregistrer et de le restituer à différents endroits; cela a dû être pensé auparavant. Même si j'adorerais le garder côté client; Je suis ouvert à une solution node.js ainsi qu'à une solution python, une simple trame de données devrait fonctionner assez.
- Qu'en est-il de la génération d'un fichier avec mes
localStorage
données? Peut-être un fichier .csv (il s'agit de données non sensibles) et le faire mettre à jour comme le mienlocalStorage
?
javascript
node.js
json
cookies
local-storage
doc vacances
la source
la source
Réponses:
Et l'utilisation de sqlite?
Un seul fichier sur votre serveur comme csv. Envoi d'une requête http Pour la mettre à jour en utilisant l'instruction SQL par knex ou quelque chose comme ça après avoir mis à jour le stockage local côté client.
Au moins, c'est mieux que cvs, je pense parce que vous pouvez définir plusieurs tables, ce qui est plus évolutif et plus efficace, vous savez, c'est une base de données.
la source
J'ajoute mes deux cents ici.
Fichier d'exportation / importation (JSON, XML, CSV, TSV, etc.)
Exportation:
Sérialisez les paramètres et téléchargez-les sous forme de fichier.
Importation:
Ouvrez le fichier de paramètres sérialisés exporté / téléchargé.
Exemple de code:
URL (chaîne de requête)
Exportation:
Encodez les paramètres dans la chaîne de requête et combinez-les avec l'URL actuelle en tant que lien hypertexte.
Importation:
Visitez l'hyperlien contenant la chaîne de requête avec les paramètres encodés, puis JavaScript détecte et charge les paramètres de la chaîne de requête.
Données encodées en Base64
Exportation:
Sérialisez les paramètres, puis codez-les en tant que chaîne Base64, puis copiez-les dans le presse-papiers.
Importation:
Collez la chaîne Base64 du presse-papiers dans la zone de texte pour décoder, désérialiser et charger les paramètres.
QR Code
Exportation:
Encodez les paramètres dans la chaîne de requête et combinez-les avec l'URL actuelle en tant que lien hypertexte. Générez ensuite une image de code QR et affichez-la.
Importation:
Scannez l'image du code QR généré et visitez l'hyperlien automatiquement.
Serveur HTTP (Node.js) / Stockage cloud (AWS S3)
Exportation:
HTTP POST pour endpoint automatiquement lors de la mise à jour des valeurs, par ID utilisateur.
Importation:
HTTP GET à partir du point de terminaison par ID utilisateur.
Extra: PouchDB
la source
Vous pouvez utiliser l'URL comme stockage si vous zippez vos paramètres utilisateur.
obtenir les paramètres que vous souhaitez stocker> json> dégonfler> encoder en base64> pousser dans l'URL
onload: récupérer les paramètres depuis l'url> décoder depuis base64> gonfler> analyser json
https://jsfiddle.net/chukanov/q4heL8gu/44/
Le paramètre d'URL sera assez long, mais 10 fois moins que le maximum disponible
la source
Au lieu d'utiliser localstorage, stockez les paramètres de votre utilisateur dans le système de fichiers InterPlanetary (IPFS) https://ipfs.io/
Fondamentalement, vous mettriez leur paramètre est un format de données comme JSON, puis l'écrire dans un fichier et le pousser vers IPFS.
Vous aurez besoin d'un moyen d'identifier quelles données vont à quel utilisateur. Vous pourriez peut-être utiliser un hachage du nom d'utilisateur et du mot de passe pour nommer vos fichiers ou quelque chose comme ça. Ensuite, votre utilisateur serait toujours en mesure d'accéder à son contenu sur n'importe quel appareil (tant qu'il n'a pas oublié son mot de passe).
la source
Vous pouvez utiliser une bibliothèque appelée
localForage
qui a fondamentalement la même API quelocalStorage
sauf qu'elle vous permet de stocker des structures de données plus complexes (tableaux, objets) et prend également en charge lenodejs
rappel de style, les promesses etasync
await
.Voici un lien vers le référentiel où vous pouvez trouver des exemples d'utilisation et comment l'implémenter dans votre projet comme vous le souhaitez.
la source
La meilleure façon de l'implémenter sans utiliser de base de données pour partager des données, je crois que c'est basé sur une solution WebRTC , je l'ai pensé comme un moyen de le faire mais je n'ai pas de code pour cela (du moins pour l'instant), donc avec certaines recherches, j'ai trouvé que quelqu'un l'avait déjà fait (pas exactement, mais avec quelques ajustements, il sera prêt) ici par exemple, et sa partie de cet article webrtc sans serveur de signalisation
voici une autre source: exemple de démonstration de base du canal de données
et sur github: exemple de base du canal de données
WebRTC n'est pas seulement pour le chat vidéo / audio, il peut également être utilisé dans la messagerie texte et la collaboration dans l'édition de texte.
Cette solution est même mentionnée dans l'une des réponses ici .
la source
Utilisez des cookies ou disposez d'un fichier téléchargeable que les utilisateurs peuvent emporter avec eux à charger lorsqu'ils accèdent à un autre navigateur. Vous pouvez le faire avec un fichier texte, JSON ou JavaScript avec des données d'objet.
la source
Vous pouvez utiliser Redis . Il s'agit d'un magasin de structure de données en mémoire, utilisé comme base de données. Vous pouvez stocker vos données dans des formats de paires de clés. Cela rend également votre application rapide et efficace.
la source
De toute évidence, la meilleure approche consiste à utiliser une base de données. Cependant, si vous êtes enclin à utiliser une base de données, la meilleure approche possible consiste à utiliser une combinaison de techniques que je crois que vous avez déjà abordées, je vais donc vous aider à relier les points ici.
Étapes nécessaires:
Instructions:
Vous utiliseriez votre localStorage de la même manière que vous l'utilisez maintenant (état de fonctionnement actuel).
Afin de déplacer ou d'avoir des paramètres utilisateur sur différents appareils, un fichier userSettings.JSON (servant de base de données de documents) sera utilisé pour stocker et importer les paramètres utilisateur.
Votre point de terminaison API serait utilisé pour obtenir les paramètres utilisateur s'il n'en existe aucun dans localStorage. Lors de la mise à jour des paramètres, mettez à jour votre localStorage puis POST / UPDATE les nouveaux paramètres dans votre fichier userSettings.JSON à l'aide de votre point de terminaison.
Votre point de terminaison API ne sera utilisé que pour gérer (lire et écrire) le fichier userSettings.JSON. Vous aurez besoin d'une méthode / fonction pour créer, mettre à jour et peut-être supprimer les paramètres de votre fichier. Comme vous le savez peut-être déjà, un format de fichier JSON n'est pas très différent d'une base de données MongoDB. Dans ce cas, vous créez simplement les méthodes dont vous avez besoin pour gérer votre fichier.
J'espère que ça aide!
la source
Vous pouvez résoudre ce problème sans base de données, mais je ne le recommanderais pas. Fondamentalement, vous avez des paires (utilisateur, localStorage) et lorsqu'un utilisateur donné s'identifie, son localStorage doit être fourni d'une manière. Vous pouvez dire aux utilisateurs de stocker leurs stockages locaux sur leur propre machine, mais ils devront ensuite les copier sur d'autres machines, ce qui demande beaucoup de travail et ne gagnera jamais en popularité. On pourrait exécuter manuellement un morceau Javascript dans la console de leur navigateur pour s'assurer que localStorage a leurs données et avoir à copier les machines localStorage sur les machines n'est que légèrement plus facile que de faire manuellement le tout.
Vous pouvez mettre les informations localStorage encodées dans une URL, mais en plus du problème de la longueur de l'URL, qui pourrait devenir un problème et des problèmes d'encodage toujours présents, tout votre localStorage peut être surveillé par un tiers ayant accès à votre routeur. Je sais que vous avez dit que les données n'étaient pas sensibles, mais je vous crois qu'elles ne le sont pas encore . Mais une fois que les utilisateurs l'utiliseront, si cela est pratique, ils stockeront également des données sensibles ou, vos clients pourraient avoir de telles tâches pour vous, ou même vous pourriez réaliser que vous devez y stocker des données qui ne sont pas 100% publiques.
En plus de cela, dans la pratique, vous serez confronté à de très graves problèmes de synchronisation, c'est-à-dire qu'il est agréable de rendre localStorage agnostique, mais alors, quelle est la vraie version? Si vous travaillez régulièrement sur 10 sessions différentes, la synchronisation des stockages locaux devient alors un problème difficile. Cela signifie que le localStorage doit être horodaté.
Ainsi, vous aurez besoin d'un emplacement central, d'un serveur pour stocker la dernière version de localStorage enregistrée. Si vous êtes évité par les bases de données pour des raisons inconnues, vous pouvez stocker localStorages dans des fichiers qui identifient l'utilisateur, comme
johndoe.json
puis, vous devrez implémenter une fonction d'exportation, qui enverra le JSON actuel de l'utilisateur au serveur et l'enregistrera dans un fichier et une fonction d'importation, qui téléchargera le fichier stocké pour l'utilisateur et s'assurera que localStorage est mis à jour en conséquence. Vous pouvez également faire les deux ensemble en implémentant une synchronisation.
C'est simple jusqu'à présent, mais que se passe-t-il si l'utilisateur dispose déjà de données utiles dans son localStorage local et sur le serveur? L'approche la plus simple consiste à remplacer l'une par l'autre, mais laquelle? Si nous importons, alors le local est remplacé, si vous exportez, celui sur le serveur est remplacé, si nous synchronisons, alors l'ancien est remplacé.
Cependant, dans certains cas, vous souhaitez fusionner deux stockages locaux du même utilisateur, donc:
nouveaux éléments
Je crois que si un élément est nouveau, il faut savoir d'une certaine manière qu'il a été créé dans cette session, ce qui est utile à savoir, car cela signifie que sur l'autre session avec laquelle nous fusionnons, ce nouvel élément n'a pas été supprimé et il est donc intuitif de l'ajouter.
changements d'éléments
Si le même élément est différent dans les deux cas, la nouvelle version devrait prévaloir.
éléments supprimés
Le cas intéressant est quand dans une session il a été supprimé et dans l'autre il a été mis à jour. Dans ce cas, je pense que le changement le plus récent devrait prévaloir.
Cependant, malgré tous vos efforts, les utilisateurs peuvent toujours gâcher (et votre logiciel aussi), il est donc logique de sauvegarder chaque session sur votre serveur.
la source