Dexie - zuki/Dexie.js GitHub Wiki
Dexie.js (オフィシャルホームページ: dexie.org) は、ブラウザで使用する標準的なクライアントサイドデータベースであるindexedDBの使用を超簡単にするライブラリである。Dexieの詳細については、READMEまたはホームページを読まれたい。
Dexie
はメインクラスであり、ライブラリでデフォルトでexportされるものである。このクラスのインスタンスはindexedDBデータベースとのコネクションを表す。
var db = new Dexie (databaseName, options?);
dbName : String | データベース名 |
options: Object (optional) | オプション |
addons: Array<DexieAddon> | このdbインスタンスで有効にするアドロンを明示的に定義する |
autoOpen: boolean | デフォルトはtrue。最初のクエリがあった際にデータベーすを自動的にオープンするか否か。 |
indexedDB: IDBFactory | indexedDBの代替となる実装を指定する。これを指定する場合は、その実装で使用するIDBKeyRangeも指定する。 |
IDBKeyRange: IDBKeyRange | 指定したindexedDB実装で使用するIDBKeyRangeインターフェースの実装 |
'addons' オプションが指定されない場合は、Dexie.addonsの値がデフォルトで使用される。
// dbインスタンスを宣言する
var db = new Dexie("MyDatabase");
// データベーススキーマを定義する
db.version(1).stores({
friends: "++id, name, age, isCloseFriend",
notes: "++id, title, date, *items"
});
// データベーすを使用する
db.transaction('rw', db.friends, db.notes, function* () {
// dbにデータを追加する:
var friend1Id = yield db.friends.add({name: 'Camilla', age: 25, isCloseFriend: 1});
var friend2Id = yield db.friends.add({name: 'Ban Ki-moon', age: 70, isCloseFriend: 0});
var noteId = yield db.notes.add({
title: 'Shop tomorrow',
date: new Date(),
items: ['milk', 'butter']
});
// dbを検索する
var closeFriends = yield db.friends
.where('isCloseFriend').equals(1)
.toArray();
console.log("Close friends:" + closeFriends.map(f => f.name));
var toShop = yield db.notes
.where('title').startsWithIgnoreCase ('shop')
.toArray();
console.log("Shopping list: " + toShop.map(note => note.items));
}).catch(function(err) {
// エラーイベントまたは例外を補足し、ログ出力する:
console.error(err.stack || err);
});
new Dexie('MyDatabase').open().then(function (db) {
console.log ("Found database: " + db.name);
console.log ("Database version: " + db.verno);
db.tables.forEach(function (table) {
console.log ("Found table: " + table.name);
console.log ("Table Schema: " +
JSON.stringify(table.schema, null, 4));
});
}).catch('NoSuchDatabaseError', function(e) {
// 指定した名前のデータベースが存在しない
console.error ("Database not found");
}).catch(function (e) {
console.error ("Oh uh: " + e);
});
// アドオンを定義する
function myForEachAddon(db) {
db.Collection.prototype.forEach = function (callback) {
// forEach() メソッドを既存のeach()の単なるエイリアスとする
return this.each(callback);
});
}
// アドオンを登録する(オプション)
Dexie.addons.push(myForEachAddon);
// アドロンを使用する:
var db = new Dexie('dbname');
db.version(1).stores({friends: 'name'});
db.transaction('rw', db.friends, function () {
db.friends.clear();
db.friends.bulkAdd([{name: "Foo"},{name: "Bar"}]);
}).then(function() {
db.friends
.where('name')
.anyOfIgnoreCase('foo','bar')
.forEach(friend => {
console.log(friend.name);
});
}).catch(ex => {
console.error(ex);
});
options でどのように適用するアドオンを知らせるか:
// 普通にオープンする。登録されたアドオンが自動的に呼び出される:
var db1 = new Dexie('dbname');
// 登録されたアドオンを無視するよう明示的にDexieに知らせる:
var db2 = new Dexie('dbname', {addons: []});
// 指定したアドオンのみを使用するよう明示的にDexieに知らせる:
var db3 = new Dexie('dbname', {addons: [myForEachAddon]});
特定のバージョンのデータベーススキーマ(オブジェクトストアとインデックス0を指定する
イベントを購読する
データベースをオープンし、機能を開始させる
操作するオブジェクトストアを返す
データベーストランザクションを開始する
データベースをクローズする
データベースを削除する
データベースがオープンしている場合、trueを返す
データベースのオープンに失敗した場合、trueを返す
ネイティブのIDBDatabaseインスタンスを返す
on('ready')の購読者にopen()の完了前にdbを使えるようにする
データベース名
version().stores()で定義された各オブジェクトストアは、そのオブジェクトストアにより命名されたWriteableTableインスタンスになる
すべてのTableインスタンスを含む配列
カレントデータベースのバージョン
トランスパイラーを必要としない今日のモダンブラウザ(2015)で非同期関数を宣言する
トランスパイラーを必要としない今日のモダンブラウザ(2015)で非同期関数をSpawnする
データベーすを削除する
カレントoriginの全データベース名をリストする
指定した名前のデータベースが存在するか否かを検知する
指定したキーパスでオブジェクトのプロパティを取り出す
指定したキーパスと値でオブジェクトのプロパティを変更する
指定したキーパスでオブジェクトのプロパティを削除する
オブジェクトのシャロークローンを作成する
オブジェクトのディープクローンを作成する
カレントトランザクションを無視した新しいスコープを作成する。
既存のメソッドをオーバーライドし、独自のメソッドを呼び出せるようにする
関数を作成して、指定した構造でそのprototypeを追加する
OOP継承のためprototypeチェーンを修正する
指定した追加プロパティを指定のオブジェクトにセットする
購読したり発火したりする、一連のイベントを作成する
拡張コンストラクタの配列
デバッグモードの読み取りとセット
package.jsonで指定されたセマンティックバージョン文字列を持つ
相当の10進数値によるDexieのバージョン番号を持つ