私は Electron ドキュメントを精査して、Electronアプリでデータを保持する方法を試してみました。たとえば、iOSまたはOS Xでは、NSUserDefaultsを使用してユーザー設定と設定を保存できます。同様のことをしたいと思います。 Electronアプリでデータを保持するにはどうすればよいですか?
NeDB は、Electron by Electronの現在の組み込み永続データベースとして唯一の推奨または注目のツールです。 - http://electron.atom.io/community/
設定が複雑な場合は、ユーザー設定を保存しておくと便利です。
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年以降、これは有効な回答ではなくなりました。以下の@ jviottiおよび@ Tharangaの回答を参照してください。
electron-json-storage と呼ばれる私が書いたNPMモジュールがあります。これは、これを抽象化し、開発者に素敵で簡単なインターフェースを提供することを目的としています。
モジュールはapp.getPath('userData')
との間でJSONを内部的に読み書きします:
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"
});
});
Elecronにユーザーデータを保存するためのNiceモジュールがあります。 電子ストア と呼ばれます。
Installation
$ 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の利点 があります。
Electronビューは、Webベースのlocalstorage apiにアクセスできるWebkitで構築されています。シンプルで簡単な設定保存に適しています。
より強力なものが必要な場合、またはメインスクリプトからのストレージアクセスが必要な場合は、多数のノードベースのストレージモジュールのいずれかを使用できます。個人的には lowdb が好きです。
ほとんどのノードストレージモジュールでは、ファイルの場所を指定する必要があります。試してください:
var app = require('app');
app.getPath('userData');
Jsonファイルを取得してこのディレクトリに設定する簡単なメソッドを提供し、必要に応じてサブディレクトリを作成し、コールバックとプロミスをサポートするモジュールがあります。
https://github.com/ran-y/electron-storage
README:
Installation
$ 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(path、cb)
storage.isPathExists(path, (itDoes) => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
storage.isPathExists(path)
storage.isPathExists(path)
.then(itDoes => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
Indexeddbは、次の理由により、クライアント側のアプリのニーズに最も適している可能性があります。
すべてのすべてで、それは良い選択です。唯一の注意点は、クロムコアがindexeddbを自動的に消去して、ストレージに負荷がかかっているときにnavigator.storage.persist
が設定されていないか、ホストマシンがクラッシュしてindexeddbが破損状態のままになっている場合。
NeDBの最新リリースは4年前であり、多くの未解決の問題があるため、お勧めしません。しかし、現在使用できる他の多くの選択肢があります。
https://github.com/pubkey/rxdb (多くの機能、監視可能なクエリ)
https://github.com/pouchdb/pouchdb (シンプルだが多くの未解決の問題)
https://github.com/techfort/LokiJS (メモリ内ストレージのみ)
https://github.com/typicode/lowdb (シンプルで小さなデータセットに適しています)
Electronで使用できるデータ永続化の方法は数多くあり、正しいアプローチを選択するかどうかは基本的にユースケースに依存します。アプリケーションの設定を保存するだけの場合は、フラットファイルやHTML5ストレージAPIなどの単純なメカニズムを使用できます。高度なデータ要件には、MySQLやMongoDB(ORMの有無にかかわらず)などの大規模データベースソリューションを選択する必要があります。
このメソッド/ツールのリストを確認して、 Electronアプリのデータを保持