You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular2中用Dexie扩展mdValuta表字段遇ConstraintError问题

解决Dexie升级表结构时的ConstraintError问题

这个报错的核心原因是你在Dexie版本升级时,重复声明了已经存在的索引/字段,导致Dexie尝试创建已存在的对象存储索引,触发了浏览器IndexedDB的约束限制。

为什么会出错?

Dexie的版本升级逻辑是:每个新版本的stores()方法只需要声明相对于上一版本的变化,不需要重复写出所有已有的字段。你在version(3)里把mdValuta的所有字段都列了出来,这会让Dexie误以为你要重新创建这些已经存在的索引(比如codudm、numdec等),而这些索引在版本2中已经存在,所以浏览器抛出了ConstraintError。

正确的升级写法

只需要在新版本的stores()里指定新增的字段f3和f4即可,已有的字段不需要重复声明:

super('WEB_IndexedDB');
// 版本1:初始表结构
this.version(1).stores({ mdValuta:'codudm,numdec,numdecpre' });
// 版本2:新增f1、f2字段
this.version(2).stores({ mdValuta:'+f1,+f2' });
// 版本3:新增f3、f4字段
this.version(3).stores({ mdValuta:'+f3,+f4' });

这里的+前缀表示新增的索引字段,如果你的f3、f4不需要作为索引,甚至可以省略+直接写字段名(不过推荐加上+明确表示新增意图)。

额外修复步骤

如果你已经尝试过错误的升级,导致浏览器的IndexedDB里残留了错误的版本记录,可能需要先清除该应用的IndexedDB数据:

  • 打开浏览器开发者工具(F12)
  • 找到Application标签(Chrome)或Storage标签(Firefox)
  • 在左侧找到IndexedDB,选中WEB_IndexedDB右键删除
  • 刷新页面重新测试

这样就能保证Dexie从干净的状态开始执行版本升级逻辑。

内容的提问来源于stack exchange,提问作者DarioN1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:27:32