Подтвердить что ты не робот

Где хранить пользовательские настройки в приложении Electron (Atom Shell)?

Я не могу найти встроенный механизм для хранения пользовательских настроек. Я надеялся, что электрон предоставит стандартный метод для хранения пользовательских настроек на всех настольных платформах. Если для этого нет прецедента, я могу реализовать его сам, я просто не хотел сразу перейти к пользовательскому решению. Исследования в Интернете довольно скудны в этой области. Спасибо!

4b9b3361

Ответ 1

Каждая платформа имеет разные местоположения по умолчанию для разных видов данных. Итак, если вы хотите хранить данные в местах по умолчанию на основе платформы, проверьте app.getPath(name)

Он извлекает путь к специальному каталогу или файлу, связанному с name.

Вы также можете использовать его для различения данных, которые пользователь хочет сохранить, и данных, сохраненных в приложении, которые вы не хотите загромождать каталоги пользователей.

Или, если вы просто хотите сохранить файлы, пересылаемые на определенный путь, вы можете использовать app.setPath(name,path)

Ответ 2

Я столкнулся с этой конкретной проблемой с моим приложением Electron, и этот пост вдохновил меня написать модуль NPM, называемый electron-json-storage.

Этот модуль позволяет легко записывать/читать JSON в/из 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"
    });

});

Ответ 3

Электрон не дает вам ничего из коробки для этого. Тем не менее, Electron дает вам метод получения идиоматического местоположения хранения пользовательских данных в кросс-платформенной форме через API app.getPath.

Я бы сказал, что 3 наиболее распространенных способа сделать это:

  • localStorage (или любой API-хранилище HTML5)
  • плоский файл JSON (это то, что я делаю, и я использую для этого магазин электроники)
  • встроенная база данных, такая как IndexedDB, neDB или sqlite

Какой из них вы выберете, будет зависеть от потребностей вашего приложения. Если вам нужен только доступ к этим данным в процессе рендеринга, я бы просто использовал localStorage. В большинстве случаев кажется, что вам нужен доступ к данным как в основном, так и в рендерере, поэтому имеет смысл иметь JSON файл. Если вы имеете дело с большим количеством данных или сложными запросами, то, возможно, база данных имеет смысл. Я написал об этом подробнее здесь.

Ответ 4

Как насчет LocalStorage? Если вам нужно получить доступ к этим настройкам из процесса браузера, вам, вероятно, нужно будет написать свой собственный (или просто использовать библиотеку node.js, которая реализует это)

Ответ 5

Лучший способ, который я нашел, - сохранить его в простом файле как JSON. Проблема в том, что если вы храните этот JSON в каталоге приложения, то при обновлении приложения он будет уничтожен. Поэтому вы хотите поместить его в каталог по умолчанию для пользовательских настроек для текущей операционной системы. Удачливейше!!!!! Для разработчиков node есть библиотека, которая поможет вам найти каталог userdata. Модуль называется appdirectory, и я использовал его несколько раз. Он чрезвычайно прост в использовании.

Смотрите APPDIRECTORY ЗДЕСЬ

Ответ 6

Появился новый модуль (загружен сегодня). Я хотел бы предложить, что дает простые методы для получения и установки json файлов в этот каталог, при необходимости создает подкаталоги и поддерживает обратные вызовы и promises:

https://github.com/ran-y/electron-storage

Readme:

Установка

$ npm install --save electron-storage

Использование

const storage = require('electron-storage');

API

storage.get(filePath, cb)

storage.get(filePath, (err, data) => {
  if (err) {
    console.error(err)
  } else {
    console.log(data);
  }
});

storage.get(Filepath)

storage.get(filePath)
.then(data => {
  console.log(data);
})
.catch(err => {
  console.error(err);
});

storage.set(filePath, data, cb)

storage.set(filePath, data, (err) => {
  if (err) {
    console.error(err)
  }
});

storage.set(filePath, data)

storage.set(filePath, data)
.then(data => {
  console.log(data);
})
.catch(err => {
  console.error(err);
});

storage.isPathExists(путь, cb)

storage.isPathExists(path, (itDoes) => {
  if (itDoes) {
    console.log('pathDoesExists !')
  }
});

storage.isPathExists(путь)

storage.isPathExists(path)
.then(itDoes => {
  if (itDoes) {
    console.log('pathDoesExists !')
  }
});