From 17577d6fb6d6f94f470066f4bc55515d2ae4e526 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Thu, 10 Jul 2025 15:15:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20indexedDB=20=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/indexedDB.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/utils/indexedDB.js b/src/utils/indexedDB.js index 4632366..5370991 100644 --- a/src/utils/indexedDB.js +++ b/src/utils/indexedDB.js @@ -2,7 +2,13 @@ import { isEmpty } from './commons'; /** * */ -const INDEXED_DB_VERSION = 4; + +/** + * 数据库版本 + * ! 每次涉及indexedDB的更新都要往上+1 + * @type {number} + */ +const INDEXED_DB_VERSION = 5; export const logWebsocket = (message, direction) => { var open = indexedDB.open('LogWebsocketData', INDEXED_DB_VERSION) open.onupgradeneeded = function () { @@ -139,6 +145,11 @@ export const writeIndexDB = (rows, table, database) => { } open.onsuccess = function () { var db = open.result + // 数据库是否存在 + if (!db.objectStoreNames.contains(table)) { + console.warn(`writeIndexDB > Database does not exist.`, table); + return + } var tx = db.transaction(table, 'readwrite') var store = tx.objectStore(table) rows.forEach(row => { @@ -191,7 +202,8 @@ export const readIndexDB = (keys=null, table, database) => { let db = e.target.result // 数据库是否存在 if (!db.objectStoreNames.contains(table)) { - resolve('Database does not exist.') + console.warn(`readIndexDB > Database does not exist.`, table); + resolve(); return } let transaction = db.transaction(table, 'readonly') @@ -288,7 +300,8 @@ export const deleteIndexDBbyKey = (keys=null, table, database) => { let db = e.target.result // 数据库是否存在 if (!db.objectStoreNames.contains(table)) { - resolve('Database does not exist.') + console.warn('deleteIndexDBbyKey > Database does not exist.', table) + resolve(); return } var tx = db.transaction(table, 'readwrite') @@ -347,7 +360,7 @@ export const deleteIndexDBbyKey = (keys=null, table, database) => { }) }; -function cleanOldData(database, storeNames=[], dateKey = 'timestamp') { +function cleanOldData(database, storeNames=[], dateKey = 'timestamp', keySet = { keyPath: 'key' }) { return function (daysToKeep = 7) { return new Promise((resolve, reject) => { let deletedCount = 0 @@ -360,7 +373,8 @@ function cleanOldData(database, storeNames=[], dateKey = 'timestamp') { storeNames.forEach(storeName => { // 数据库是否存在 if (!db.objectStoreNames.contains(storeName)) { - var store = db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true }) + var store = db.createObjectStore(storeName, keySet) + // var store = db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true }) store.createIndex('timestamp', 'timestamp', { unique: false }) } else { const logStore = openRequest.transaction.objectStore(storeName) @@ -443,6 +457,8 @@ function cleanOldData(database, storeNames=[], dateKey = 'timestamp') { reject(event.target.error) } } + } else { + console.warn('cleanOldData: No data to delete.', database); } } openRequest.onerror = function (e) { @@ -452,7 +468,7 @@ function cleanOldData(database, storeNames=[], dateKey = 'timestamp') { } } -export const clean7DaysWebsocketLog = cleanOldData('LogWebsocketData', ['LogStore']); +export const clean7DaysWebsocketLog = cleanOldData('LogWebsocketData', ['LogStore'], 'timestamp', { keyPath: 'id', autoIncrement: true }); export const clean7DaysMailboxLog = cleanOldData('mailbox', ['dirs', 'maillist', 'listrow', 'mailinfo', 'draft']);