有没有一种方法可以保证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');
}
}
字符串
但是浏览器说我不能运行ObjectStore,除非我在oncode.exe事件中。在这一点上,数据库没有升级。这个用户和其他所有人都在版本5上。我可以更改代码以尝试打开v6并强制升级以修复它,但是据我所知,其他人可能会损坏v6。
2条答案
按热度按时间xxb16uws1#
如果数据库足够小,有一种非常简单的方法可以做到这一点:将所有数据读入内存,删除旧数据库,使用正确的对象存储和正确的版本创建新数据库,然后将所有数据写入其中。
eh57zj3b2#
既然你澄清了
.保证indexedDB中对象存储的存在而不改变版本号?
这里意味
创建...如果它不存在
我想答案是否定的
是的,你可以使用IDBDatabase: objectStoreNames property检查它是否存在。它返回一个DOMStringList,你可以用它来调用
contains()
方法。但是你不能在没有版本升级的情况下创建一个对象存储(如果它还不存在)。此方法只能在versionchange事务中调用。
IDBDatabase: createObjectStore() method的