Я не могу найти встроенный механизм для хранения пользовательских настроек. Я надеялся, что электрон предоставит стандартный метод для хранения пользовательских настроек на всех настольных платформах. Если для этого нет прецедента, я могу реализовать его сам, я просто не хотел сразу перейти к пользовательскому решению. Исследования в Интернете довольно скудны в этой области. Спасибо!
Где хранить пользовательские настройки в приложении Electron (Atom Shell)?
Ответ 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 !')
}
});
Ответ 7
Можно хранить данные в куки; У Electron есть механизм для этого (https://electronjs.org/docs/api/cookies), и файлы cookie можно получить в браузере (Angular: https://docs.angularjs.org/api/ngCookies/service/ $ куки, Реагировать/Другое: https://github.com/reactivestack/cookies)
Я смог заставить его работать с Angularjs.