RxStorage Dexie.js
To store the data inside of IndexedDB in the browser, you can also use the Dexie.js RxStorage.
Dexie.js is a minimal wrapper around IndexedDB.
For the Dexie based RxStorage
, we use the mingo query handler.
Pros
- Can use Dexie.js addons.
Cons
- Does not use a Batched Cursor or custom indexes which makes queries slower compared to the IndexedDB RxStorage.
Usage
import { createRxDatabase } from 'rxdb';
import { getRxStorageDexie } from 'rxdb/plugins/storage-dexie';
const db = await createRxDatabase({
name: 'exampledb',
storage: getRxStorageDexie()
});
Overwrite/Polyfill the native IndexedDB
Node.js has no IndexedDB API. To still run the Dexie RxStorage
in Node.js, for example to run unit tests, you have to polyfill it.
You can do that by using the fake-indexeddb module and pass it to the getRxStorageDexie()
function.
import { createRxDatabase } from 'rxdb';
import { getRxStorageDexie } from 'rxdb/plugins/storage-dexie';
//> npm install fake-indexeddb --save
const fakeIndexedDB = require('fake-indexeddb');
const fakeIDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange');
const db = await createRxDatabase({
name: 'exampledb',
storage: getRxStorageDexie({
indexedDB: fakeIndexedDB,
IDBKeyRange: fakeIDBKeyRange
})
});
Using addons
Dexie.js has its own plugin system with many plugins for encryption, replication or other use cases. With the Dexie.js RxStorage
you can use the same plugins by passing them to the getRxStorageDexie()
function.
const db = await createRxDatabase({
name: 'exampledb',
storage: getRxStorageDexie({
addons: [ /* Your Dexie.js plugins */ ]
})
});