【问题标题】:Event fired when IndexedDb altered?IndexedDb 更改时触发的事件?
【发布时间】:2021-05-18 18:22:27
【问题描述】:

我们使用 DexieJS 作为 IndexedDb 的包装器,并正在寻找一种方法来确定底层数据库架构是否发生变化。最坏的情况是,用户在使用我们的应用程序的过程中删除了一个表或整个数据库(不太可能?当然,但是来吧 - users)。
或者,IndexedDb 是否记录“上次修改”值之类的内容?如果我们只有这些,我们就可以完成这项工作。可订阅的事件会更好,不过...... IndexedDb 或 Dexie 是否支持这样的东西?

【问题讨论】:

    标签: javascript indexeddb dexie


    【解决方案1】:

    架构更改必须通过 IndexedDB 中的版本升级,并且每当架构更改时都会触发一个事件“onversionchange”。 Dexie 在此处描述事件:https://dexie.org/docs/Dexie/Dexie.on.versionchange

    如果您想在 table.clear() 等正常的非架构更改时收到通知,您应该尝试支持跨窗口/工作表观察的 dexie 的最新 alpha 版本 (3.1.0-alpha.8)。请参阅release notes for 3.1.0-alpha.1this blog post。在您的情况下,您可能希望观察整个表的任何变化。为此,请使用:

    const observable = liveQuery(() => db.yourTable.toArray());
    

    还有一个较低级别的事件,以防您希望只收到通知而不重新查询数据:See this issue comment

    请注意,dexie 只能观察源自使用 dexie 更改数据的代码的更改。它不会对直接进入 indexedDB API 的更改做出反应,因为 DOM API 中没有这样的原生事件。

    【讨论】:

    • 谢谢,大卫。很棒的信息,我们很喜欢 Dexie,顺便说一句。最后一段是我们需要的最终答案,很不幸。如果 IndexedDb 可以让我们知道是否有讨厌的用户进入并破坏了我们的数据库,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多