我在IndexedDb中成功创建了一个数据库,但当我尝试向数据库中添加值时,我看到以下错误:
DOM例外:无法在“IDBObjectStore”上执行“添加”:评估对象存放区的索引键路径未产生值。
程式码片段:
let db = new AngularIndexedDB('myDb', 1);
db.createStore(1, (evt) => {
const objectStore = evt.currentTarget.result.createObjectStore('people', { keyPath: 'id', unique: true });
objectStore.createIndex("name", "name", { unique: false });
objectStore.createIndex("email", "email", { unique: true });
}).then(() => {
db.add('people', { name: 'name', email: 'email' }).then(() => {
}, (error) => {
console.log(error);
});
}, (error) => {
console.log(error);
});
我检查了表的名称。这是完全相同的。以及它的值各自的键。
如何解决此问题?您能否分享一下对此错误的见解?
您的帮助将不胜感激。提前感谢。
3条答案
按热度按时间kadbb4591#
使用密钥路径创建对象存储时:
然后:
1.您还必须指定存储区应使用密钥生成器,例如
{keyPath: 'id', autoIncrement: true}
,这将导致为您生成数字密钥(1、2、3...)并将其注入到值中;或:1.您存储的值必须已经包含与keypath匹配的属性,例如
store.put({name: 'foo', id: 1234})
(Also,
unique
不是对象存放区的属性,只有索引。索引键在对象存放区内永远是唯一的。)u59ebvdq2#
在我的例子中,当我试图强制IndexDB在数据库中创建一个记录的副本时,我遇到了这个错误,方法是保存一个记录的深层副本,其中的键被分配了一个'undefined'。
xqk2d5yq3#
对于那些面临类似问题的TypeScript属性。
假设我们有这个模型
我们这样初始化objectStore
然后我们要保存模型
很遗憾,我们将收到
这是因为现在IndexedDB在解释我们的transpiled模型时有问题(我不知道为什么,它可能与tsconfig.json有关吗?)
一旦我们将模型改为
然后尝试保存它,我们将实现一个成功完成的事务。