修复索引数据库

问题描述 投票:0回答:1

有没有办法保证indexedDB中对象存储的存在而不改变版本号?

背景:

我的一个用户将 indexedDB 设置为与其他人相同的版本,但没有对象存储。我不知道他们是怎么做到的,所以我无法预测它是否会再次发生,我也不知道这个问题在公共领域会有多广泛。

我尝试使用以下代码来重建丢失的objectStore

    this.request = window.indexedDB.open(this.dbName, this.DB_VERSION);
    this.request.onsuccess = (event) => {
        const database = event.target.result;
        if (!database.objectStoreNames.contains(store)) {
                const newStore = database.createObjectStore(store, {keyPath: 'key'});
                newStore.createIndex('expiry_idx', 'exp');
        }
    }

但是浏览器说我无法运行 createObjectStore,除非我处于 onupgradeneeded 事件中。此时数据库尚未升级。该用户和其他人都使用版本 5。我可以更改代码以尝试打开 v6 并强制进行修复它的升级,但据我所知,其他人可能会损坏 v6。

javascript indexeddb
1个回答
0
投票

既然你澄清了

保证索引数据库中对象存储的存在

这里的意思是

创建...如果不存在

我想答案是

没有

是的,您可以使用 IDBDatabase: objectStoreNames 属性检查它是否存在。它返回一个 DOMStringList,您可以使用它调用

contains()
方法。但是如果不升级版本,您无法创建对象存储(如果它尚不存在)。

此方法只能在版本更改事务中调用。

IDBDatabase:createObjectStore() 方法

© www.soinside.com 2019 - 2024. All rights reserved.