Skip to content

Instantly share code, notes, and snippets.

@underground
Created September 6, 2016 01:42
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save underground/d50e40170d54b8a0f8a3f4fdd466eee4 to your computer and use it in GitHub Desktop.
Save underground/d50e40170d54b8a0f8a3f4fdd466eee4 to your computer and use it in GitHub Desktop.
Very simple indexed DB wrapper class for javascript
export default class IndexedDB {
constructor(dbName, dbVersion, stores) {
this.db;
this.dbName = dbName;
this.dbVersion = dbVersion;
this.stores = stores;
}
openDB(callback=(()=>{})) {
if (!window.indexedDB) {
callback({ message: 'Unsupported indexedDB' });
}
let request = window.indexedDB.open(this.dbName, this.dbVersion);
request.onsuccess = e => {
this.db = request.result;
};
request.onerror = e => callback(e.target.error);
request.onupgradeneeded = e => {
this.db = e.target.result;
this.db.onabort = e2 => callback(e2.target.error);
this.db.error = e2 => callback(e2.target.error);
this.db.oncomplete = e2 => {
stores.forEach((o) => {
this.db.createObjectStore(o.name, o.option);
});
}
};
}
deleteDB() {
if (window.indexedDB) {
window.indexedDB.deleteDatabase(this.dbName);
}
}
deleteStore(storeName, callback=(()=>{})) {
if (this.db) {
this.db.deleteObjectStore();
this.db.oncomplete = e => callback(e.target.result);
this.db.onabort = e => callback(e.target.error);
this.db.error = e => callback(e.target.error);
}
}
upsert(storeName, data, callback=(()=>{})) {
if (this.db && data) {
let transaction = this.db.transaction([storeName], IDBTransaction.READ_WRITE);
transaction.onabort = te => callback(te.target.error);
transaction.onerror = te => callback(te.target.error);
let request = transaction.objectStore(storeName).put(data);
request.onerror = e => callback(e.target.error);
request.onsuccess = e => callback(e.target.result);
}
}
get(storeName, key, callback=(()=>{})) {
if (this.db && key) {
let request = this.db.transaction([storeName]).objectStore().get(key)
request.onerror = e => callback(e.target.error);
request.onsuccess = e => callback(e.target.result);
}
}
getAll(storeName, callback=(()=>{})) {
if (this.db) {
let request = this.db.transaction(storeName).objectStore(storeName).openCursor(null, IDBCursor.NEXT);
let results = [];
request.onsuccess = e => {
let cursor = e.target.result;
if (cursor) {
console.log("Key:" + cursor.key + " Value:" + cursor.value);
results.push({ [cursor.key]: cursor.value });
cursor.continue();
} else {
callback(results);
}
};
request.onerror = e => callback(e.target.error);
}
}
remove(storeName, key, callback=(()=>{})) {
if (this.db) {
let request = this.db.transaction([storeName], IDBTransaction.READ_WRITE).objectStore(storeName).delete(key);
request.onerror = e => callback(e.target.error);
request.onsuccess = e => callback(e.target.result);
}
}
clear(storeName, callback=(()=>{})) {
if (this.db) {
let request = this.db.transaction([storeName], IDBTransaction.READ_WRITE).objectStore(storeName).clear();
request.onerror = e => callback(e.target.error);
request.onsuccess = e => callback(e.target.result);
}
}
count(storeName, callback=(()=>{})) {
if (this.db) {
let request = this.db.transaction([storeName]).objectStore(storeName).count();
request.onerror = e => callback(e.target.error);
request.onsuccess = e => callback(e.target.result);
}
}
}
@Maks-T
Copy link

Maks-T commented May 21, 2021

Приведите пример, как работать с экземпляром этого класса пожалуйста.

@lukewatts
Copy link

Example of usage:

let storeName = 'my-object-store';
const idb = new IndexedDB('my-database', 1, storeName);

idb.openDb();

idb.upsert('name', 'Luke Watts'');

let name = idb.get('name');

console.log(`Hello ${name}`); // console: Hello Luke Watts

Haven't tried it but that's how I'd start

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment