const request = window.indexedDB.open('test', 1) request.onsuccess = function(event:any) { const db = event.target.result const objectStore1 = db.createObjectStore('table1', {keyPath: 'uuid', autoIncrement: true}) objectStore1.createIndex('uuid', 'uuid', {unique: false}) const transaction = db.transaction(['table1'], 'readwrite') const objectStore = transaction.objectStore('table1') const index = objectStore.index('name') objectStore.add({name: 'a', age: 10}) objectStore.add({name: 'b', age: 20}) }
时间: 2024-03-29 07:37:05 浏览: 49
Vue源码中要const _toStr = Object.prototype.toString的原因分析
根据你提供的代码,我可以看到你正在创建一个名为“test”的IndexedDB数据库,并使用版本号1进行打开。然后,你创建了一个名为“table1”的对象存储,并为该对象存储指定了一个自增的键“uuid”,并创建了一个名为“uuid”的索引。接下来,你创建了一个事务并获取了“table1”的对象存储和一个名为“name”的索引。最后,你向该对象存储中添加了两个对象:一个名为“a”、年龄为10岁,另一个名为“b”、年龄为20岁。
但是,这段代码的问题是,你在创建索引时使用的键名“name”,与你在添加对象时使用的键名“name”不同。因此,当你尝试将对象添加到对象存储中时,将会出现“Uncaught DOMException: Key not valid for use in specified state”错误。你需要确保添加对象时使用的键名与在创建索引时使用的键名相同。
另外,你没有在IndexedDB的versionchange事件处理程序中创建或更新对象存储,这可能会导致你遇到的错误“Uncaught DOMException: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.”。因此,你需要确保在版本变更事务中创建对象存储,并在需要更新数据库结构时执行版本变更操作。
阅读全文