Как сохранить данные в приложении Electron?
Я просматривал документацию Electron, чтобы попытаться выяснить, как сохранить данные в приложении Electron. Например, в iOS или OS X вы можете использовать NSUserDefaults для хранения пользовательских настроек и настроек. Я хотел бы сделать что-то подобное. Как сохранить данные в приложении Electron?
Ответы
Ответ 1
NeDB - единственный предлагаемый или рекомендуемый инструмент в качестве встроенной постоянной базы данных для Electron от Electron, в настоящее время. - http://electron.atom.io/community/
Также может быть полезно сохранить пользовательские настройки, если настройки сложные.
Почему NeDB может быть лучшим решением в этом случае?
Встроенная постоянная или в памяти база данных для Node.js, nw.js, Electron и браузеры, 100% JavaScript, без бинарной зависимости. API является подмножеством MongoDB, и это достаточно быстро. - NeDB
Создание или загрузка базы данных:
var Datastore = require('nedb')
, db = new Datastore({ filename: 'path/to/datafile', autoload: true });
// You can issue commands right away
Вставка документа:
var doc = { hello: 'world'
, n: 5
, today: new Date()
, nedbIsAwesome: true
, notthere: null
, notToBeSaved: undefined // Will not be saved
, fruits: [ 'apple', 'orange', 'pear' ]
, infos: { name: 'nedb' }
};
db.insert(doc, function (err, newDoc) { // Callback is optional
// newDoc is the newly inserted document, including its _id
// newDoc has no key called notToBeSaved since its value was undefined
});
Поиск документов:
// Finding all inhabited planets in the solar system
db.find({ system: 'solar', inhabited: true }, function (err, docs) {
// docs is an array containing document Earth only
});
Список можно продолжить...
Обновление - сентябрь 2019 года
По состоянию на 2019 год это уже не правильный ответ. Смотрите ответы @jviotti и @Tharanga ниже.
Ответ 2
Существует модуль 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
Электронные представления создаются с помощью Webkit, который дает вам доступ к API-интерфейсу localstorage. Хорошо для простого и удобного хранения настроек.
Если вам нужно что-то более мощное или вам нужен доступ к хранилищу из основного сценария, вы можете использовать один из многочисленных модулей хранения на основе узлов. Лично мне нравится lowdb.
В большинстве модулей хранения узлов вам нужно будет указать местоположение файла. Попробуйте:
var app = require('app');
app.getPath('userData');
Ответ 4
Имеется хороший модуль для хранения пользовательских данных в электоне. Он назывался electron-store.
Установка
$ npm install electron-store
Использование примера (скопировано из github)
const Store = require('electron-store');
const store = new Store();
store.set('unicorn', '🦄');
console.log(store.get('unicorn'));
//=> '🦄'
// Use dot-notation to access nested properties
store.set('foo.bar', true);
console.log(store.get('foo'));
//=> {bar: true}
store.delete('unicorn');
console.log(store.get('unicorn'));
//=> undefined
Этот модуль имеет много функций и существует много преимуществ перед window.localStorage
Ответ 5
Существует модуль, который предоставляет простые методы для получения и установки файлов json в этот каталог, создает подкаталоги при необходимости и поддерживает обратные вызовы и обещания:
https://github.com/ran-y/electron-storage
Readme:
Установка
$ npm install --save electron-storage
usage
использования
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 (путь, кб)
storage.isPathExists(path, (itDoes) => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
storage.isPathExists (путь)
storage.isPathExists(path)
.then(itDoes => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
Ответ 6
Так как последний выпуск NeDB был 4 года назад и есть много открытых вопросов, я бы не рекомендовал его. Но есть много других альтернатив, которые вы можете использовать сейчас.
https://github.com/pubkey/rxdb (много возможностей, наблюдаемые запросы)
https://github.com/pouchdb/pouchdb (простой, но много открытых вопросов)
https://github.com/techfort/LokiJS (только в памяти)
https://github.com/typicode/lowdb (хорошо для простых, небольших наборов данных)
Ответ 7
Вы можете выбрать Indexeddb, который, скорее всего, подойдет для приложений на стороне клиента из-за:
- Его встроенный механизм управления версиями. Клиентские приложения часто сталкиваются с фрагментацией версий, поскольку пользователи обычно не обновляются до новой версии одновременно. Так что проверять версию существующей базы данных и обновлять ее - хорошая идея.
- Это схема без схемы, которая позволяет гибко добавлять больше данных в хранилище клиента (что часто случается по моему опыту) без необходимости обновлять базу данных до новой версии, если только вы не создаете новые индексы.
- Он поддерживает широкий диапазон данных: основные типы, а также данные BLOB-объектов (файл, изображения)
В целом, это хороший выбор. Единственное предостережение заключается в том, что ядра хрома могут автоматически уничтожать indexeddb для восстановления дискового пространства, когда хранилище перегружено, если navigator.storage.persist
не установлен, или когда на хост-машине происходит сбой, оставляя indexeddb в поврежденном состоянии.
Ответ 8
Существует множество способов сохранения данных, которые могут быть использованы в Electron, и выбор правильного подхода существенно зависит от вашего варианта использования. Если речь идет только о сохранении настроек приложения, вы можете использовать простые механизмы, такие как плоские файлы или API-интерфейсы HTML5 для хранения данных, для получения дополнительных требований к данным вы должны выбрать крупные решения для баз данных, такие как MySQL или MongoDB (с ORM или без них).
Вы можете проверить этот список методов/инструментов на сохранить данные в приложениях Electron