web-dev-qa-db-ja.com

Electronアプリでデータを保持する方法は?

私は Electron ドキュメントを精査して、Electronアプリでデータを保持する方法を試してみました。たとえば、iOSまたはOS Xでは、NSUserDefaultsを使用してユーザー設定と設定を保存できます。同様のことをしたいと思います。 Electronアプリでデータを保持するにはどうすればよいですか?

32
Andrew

NeDB は、Electron by 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年9月

2019年以降、これは有効な回答ではなくなりました。以下の@ jviottiおよび@ Tharangaの回答を参照してください。

29
mertyildiran

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"
    });

});
17
jviotti

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の利点 があります。

8
Tharanga

Electronビューは、Webベースのlocalstorage apiにアクセスできるWebkitで構築されています。シンプルで簡単な設定保存に適しています。

より強力なものが必要な場合、またはメインスクリプトからのストレージアクセスが必要な場合は、多数のノードベースのストレージモジュールのいずれかを使用できます。個人的には lowdb が好きです。

ほとんどのノードストレージモジュールでは、ファイルの場所を指定する必要があります。試してください:

var app = require('app');
app.getPath('userData');
8
Teak

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 !')
  }
});
5
Yoni

Indexeddbは、次の理由により、クライアント側のアプリのニーズに最も適している可能性があります。

  • そのビルトインのバージョン管理メカニズム。ユーザーが通常同時に新しいバージョンに更新することはないため、クライアント側のアプリケーションはバージョンの断片化に直面することがよくあります。したがって、既存のデータベースのバージョンを確認し、それに応じて更新することをお勧めします。
  • スキーマレスであるため、新しいインデックスを作成しない限り、データベースを新しいバージョンに更新することなく、クライアントのストレージにデータを追加する柔軟性が得られます(私の経験ではかなり頻繁に発生します)。
  • 広範囲のデータをサポートします:基本タイプとblobデータ(ファイル、画像)

すべてのすべてで、それは良い選択です。唯一の注意点は、クロムコアがindexeddbを自動的に消去して、ストレージに負荷がかかっているときにnavigator.storage.persistが設定されていないか、ホストマシンがクラッシュしてindexeddbが破損状態のままになっている場合。

2
vuamitom

NeDBの最新リリースは4年前であり、多くの未解決の問題があるため、お勧めしません。しかし、現在使用できる他の多くの選択肢があります。

https://github.com/pubkey/rxdb (多くの機能、監視可能なクエリ)

https://github.com/pouchdb/pouchdb (シンプルだが多くの未解決の問題)

https://github.com/techfort/LokiJS (メモリ内ストレージのみ)

https://github.com/typicode/lowdb (シンプルで小さなデータセットに適しています)

2
pubkey

Electronで使用できるデータ永続化の方法は数多くあり、正しいアプローチを選択するかどうかは基本的にユースケースに依存します。アプリケーションの設定を保存するだけの場合は、フラットファイルやHTML5ストレージAPIなどの単純なメカニズムを使用できます。高度なデータ要件には、MySQLやMongoDB(ORMの有無にかかわらず)などの大規模データベースソリューションを選択する必要があります。

このメソッド/ツールのリストを確認して、 Electronアプリのデータを保持

0
Ahmed Bouchefra