¿Dónde almacenar la configuración del usuario en la aplicación Electron (Atom Shell)?

4 minutos de lectura

Avatar de usuario de CodeManiak
CodeManiak

Parece que no puedo ubicar un mecanismo incorporado para almacenar la configuración del usuario. Esperaba que electron proporcionara un método estándar para almacenar la configuración del usuario en todas las plataformas de escritorio. Si no hay un precedente para esto, puedo implementarlo yo mismo, simplemente no quería saltar a una solución personalizada de inmediato. La investigación en línea es bastante escasa en esta área. ¡Gracias!

  • Guardé mi configuración usando localStorage pero estoy muy interesado en saber más sobre cómo funciona esto con Electron. Dado que es complicado borrar localStorage y una reinstalación de una aplicación Electron no parece borrarlo.

    – E. Sundin

    30 de mayo de 2015 a las 10:56


Avatar de usuario de Josh
jose

Cada plataforma tiene diferentes ubicaciones predeterminadas para diferentes tipos de datos. Entonces, si desea almacenar datos en ubicaciones predeterminadas según la plataforma, consulte app.getPath(name)

Recupera una ruta a un directorio o archivo especial asociado con name.

También puede usarlo para diferenciar entre los datos que el usuario desea guardar y los datos que su aplicación guarda y que no desea saturar los directorios de los usuarios.

O si solo desea almacenar archivos relacionados con una ruta específica, puede usar el
app.setPath(name,path)

  • Exactamente lo que estaba buscando, ¡simplemente no sabía que existía esta característica! ¡Gracias!

    – CodeManiak

    8 de junio de 2015 a las 16:42

Enfrenté este problema particular con mi aplicación Electron y esta publicación me inspiró a escribir un módulo NPM llamado electron-json-almacenamiento.

Este módulo permite escribir/leer JSON fácilmente hacia/desde 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"
    });

});

  • electron-json-storage es impresionante, otra opción es lowdb

    – JUO

    26 de julio de 2016 a las 10:19


  • Solo por curiosidad, pero ¿cuál es la ventaja de electron-json-storage frente a solo var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"})) y fs.writeFileSync(path, JSON.stringify(someObj)}); Incluso hacerlo asíncrono no agregaría más que unas pocas líneas.

    – gman

    23 de noviembre de 2016 a las 21:57


  • también mira ajustes de electrones.

    – k7durmiente

    22 de diciembre de 2016 a las 8:20


  • Gran recurso. Aunque parece que la biblioteca no admite promesas de forma nativa como las que tiene en el ejemplo.

    –Keith Holliday

    3 sep 2017 a las 17:50

  • Cada dependencia que agrega es un área de superficie más grande para exploits, otra pieza de código que debe actualizarse constantemente, y si es un desarrollador profesional, también necesita auditar el código. Podría decirse que es una mala práctica tomar una biblioteca inflada completa solo para reemplazar 2 líneas de código.

    – gman

    31 de octubre de 2019 a las 3:04

avatar de usuario de ccnokes
ccnokes

Electron no te da nada listo para usar por esto. Sin embargo, Electron le brinda un método para obtener la ubicación idiomática de almacenamiento de datos de usuario de una manera multiplataforma a través de la aplicación.getPath API.

Yo diría que las 3 formas más comunes de hacer esto son:

  • localStorage (o cualquier API de almacenamiento HTML5)
  • archivo JSON plano (esto es lo que hago, y uso almacén de electrones para ello)
  • base de datos incrustada como IndexedDB, neDB o sqlite

El que elija dependerá de las necesidades de su aplicación. Si solo necesita acceder a estos datos en el proceso de procesamiento, entonces solo usaría localStorage. La mayoría de las veces parece que necesita acceder a los datos tanto en el procesador principal como en el renderizador, por lo que un archivo JSON tiene sentido. Si está tratando con muchos datos o consultas complejas, entonces tal vez una base de datos tenga sentido. Escribí sobre esto más en detalle aquí.

¿Qué tal el almacenamiento local? Si necesita acceder a esta configuración desde el proceso del navegador, probablemente deba escribir la suya propia (o simplemente usar una biblioteca node.js que implemente esto)

La mejor manera que he encontrado es almacenarlo en un archivo simple como JSON. El problema es que si almacena ese JSON en el directorio de la aplicación, cuando actualice la aplicación, se borrará. Entonces, desea colocarlo en el directorio predeterminado para la configuración del usuario para el sistema operativo actual. ¡¡¡¡¡AFORTUNADAMENTE!!!!! Hay una biblioteca para desarrolladores de nodos que lo ayudará a encontrar el directorio de datos de usuario. El modulo se llama appdirectory, y lo he usado varias veces. Es extremadamente fácil de usar.

Ver DIRECTORIO DE APLICACIONES AQUÍ

  • o solo getPath(userData)

    – Dan

    7 oct 2016 a las 21:01

Uno podría almacenar datos en cookies; El electrón tiene un mecanismo para ello (https://electronjs.org/docs/api/cookies) y las cookies se pueden recuperar en el navegador (Angular: https://docs.angularjs.org/api/ngCookies/service/$cookies, Reaccionar/Otro: https://github.com/reactivestack/cookies)

Pude hacerlo funcionar con Angularjs.

  • o solo getPath(userData)

    – Dan

    7 oct 2016 a las 21:01

¿Ha sido útil esta solución?