如何解决Dexie.js:Table.where错误,显示“无法读取未定义的属性”绑定”
我在让where()语句在Dexie中工作时遇到了一些麻烦。我尝试使用where导致以下错误:
console.warn node_modules/dexie/dist/dexie.js:1273 Unhandled rejection: TypeError: Cannot read property 'bound' of undefined at makeIDBKeyRange (node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:112:21) at node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:314:31 ...
这是我使用的代码:
import Dexie from "dexie"; // @ts-ignore there is not a type for the fake indexeddb import indexedDB from 'fake-indexeddb'; class TestDatabase extends Dexie { constructor() { super("test"); this.version(1).stores({ data: "id,name" }); } } test("dexie",async ()=>{ Dexie.dependencies.indexedDB = indexedDB; const db = new TestDatabase(); await db.table("data").put({id: "x",name: "xname"}); const x=await db.table("data").get("x"); expect (x.name).toEqual("xname"); const x2=await db.table("data").where("id").equals("x").toArray() expect (x2[0].name).toEqual("xname"); })
在调用toArray()时,测试似乎失败了。我怎样才能通过这项考试?
解决方法
我认为您还缺少设置Dexie.dependencies.IDBKeyRange的功能。
Fake-indexeddb建议执行以下操作以将false-indexeddb集成到节点中:
const Dexie = require("dexie");
require("fake-indexeddb/auto");
const db = new Dexie("MyDatabase");
请参见their docs
,感谢@David。该文档使我着迷于此解决方案。它运行没有错误:
import Dexie from "dexie"; // @ts-ignore there is not a type for the fake indexeddb import indexedDB from 'fake-indexeddb'; class TestDatabase extends Dexie { constructor() { const IDBKeyRange=require("fake-indexeddb/lib/FDBKeyRange"); super("test",{ indexedDB: indexedDB,IDBKeyRange: IDBKeyRange,}); this.version(1).stores({ data: "id,name" }); } } test("dexie",async ()=>{ const db = new TestDatabase(); await db.table("data").put({id: "x",name: "xname"}); const x=await db.table("data").get("x"); expect (x.name).toEqual("xname"); const x2=await db.table("data").where("id").equals("x").toArray(); expect (x2[0].name).toEqual("xname"); })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。