首页 > 解决方案 > Dexie.js:Table.where() 错误,“无法读取未定义的属性‘绑定’”

问题描述

我在让 where() 语句在 Dexie 中工作时遇到了一些麻烦。我尝试使用 where 会导致以下错误:

  console.warn node_modules/dexie/dist/dexie.js:1273
    未处理的拒绝:TypeError:无法读取未定义的属性“绑定”
        在 makeIDBKeyRange (node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:112:21)
        在 node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:314:31
...

这是我使用的代码:

从“dexie”导入 Dexie;
// @ts-ignore 没有虚假 indexeddb 的类型
从'fake-indexeddb'导入indexedDB;

类 TestDatabase 扩展 Dexie {
  构造函数(){
    超级(“测试”);
    this.version(1).stores({
      数据:“身份证,姓名”
    });
  }
}

test("dexie", async ()=>{
  Dexie.dependencies.indexedDB = indexedDB;
  const db = new TestDatabase();
  等待 db.table("data").put({id: "x", name: "xname"});
  const x=await db.table("data").get("x");
  期望 (x.name).toEqual("xname");

  const x2=await db.table("data").where("id").equals("x").toArray()
  期望 (x2[0].name).toEqual("xname");
})

测试似乎在调用 toArray() 时失败。我怎样才能让这个测试通过?

标签: typescriptindexeddbdexie

解决方案


我认为您也缺少设置 Dexie.dependencies.IDBKeyRange 。

Fake-indexeddb 建议在 node 中集成 fake-indexeddb:

const Dexie = require("dexie");
require("fake-indexeddb/auto");

const db = new Dexie("MyDatabase");

查看他们的文档


推荐阅读