diff --git a/public/database.js b/public/database.js new file mode 100644 index 0000000..d5bc532 --- /dev/null +++ b/public/database.js @@ -0,0 +1,102 @@ +// 使用示例: +// const db = new IndexedDB('myDatabase', 1, 'myStore'); +// await db.open(); +// await db.add({ id: 1, name: 'John' }); +// const data = await db.get(1); +// console.log(data); +// await db.delete(1); + +export default class IndexedDB { + constructor(databaseName, databaseVersion, storeName) { + this.databaseName = databaseName; + this.databaseVersion = databaseVersion; + this.storeName = storeName; + this.db = null; + } + + open() { + return new Promise((resolve, reject) => { + const request = indexedDB.open(this.databaseName, this.databaseVersion); + + request.onerror = (event) => { + reject(event.target.error); + }; + + request.onsuccess = (event) => { + this.db = event.target.result; + resolve(this.db); + }; + + request.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains(this.storeName)) { + db.createObjectStore(this.storeName, { keyPath: 'id' }); + } + }; + }); + } + + add(data) { + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([this.storeName], 'readwrite'); + const objectStore = transaction.objectStore(this.storeName); + const request = objectStore.add(data); + + request.onerror = (event) => { + reject(event.target.error); + }; + + request.onsuccess = (event) => { + resolve(event.target.result); + }; + }); + } + + get(id) { + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([this.storeName], 'readonly'); + const objectStore = transaction.objectStore(this.storeName); + const request = objectStore.get(id); + + request.onerror = (event) => { + reject(event.target.error); + }; + + request.onsuccess = (event) => { + resolve(event.target.result); + }; + }); + } + + getAll() { + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([this.storeName], 'readonly'); + const objectStore = transaction.objectStore(this.storeName); + const request = objectStore.getAll(); + + request.onerror = (event) => { + reject(event.target.error); + }; + + request.onsuccess = (event) => { + resolve(event.target.result); + }; + }); + } + + delete(id) { + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([this.storeName], 'readwrite'); + const objectStore = transaction.objectStore(this.storeName); + const request = objectStore.delete(id); + + request.onerror = (event) => { + reject(event.target.error); + }; + + request.onsuccess = (event) => { + resolve(event.target.result); + }; + }); + } + } diff --git a/public/index.html b/public/index.html index a6a6da6..bef7332 100644 --- a/public/index.html +++ b/public/index.html @@ -12,15 +12,21 @@

message