首页 > 解决方案 > PWA 创建 IndexedDB 数据库,但不创建任何对象存储

问题描述

我有一个 Vue PWA,它在第一次加载或升级时停止创建我的 IndexDB 对象存储。这是我的代码,我使用的是最新版本的 IDB ( https://github.com/jakearchibald/idb ):

await openDB('dbname', 1, {
        upgrade(db, oldVersion, newVersion, transaction) {
            switch (newVersion) {
                case 0:
                // a placeholder case so that the switch block will
                // execute when the database is first created
                // (oldVersion is 0)
                // falls through
                case 1:
                    db.createObjectStore('change_log', {keyPath: 'id'});
                    db.createObjectStore('person', {keyPath: 'id'})
                        .createIndex('username', 'username');
                    break;
            }
        }
    });

我尝试了多个浏览器和隐身标签等,但总是会发生同样的事情。数据库已创建,但未创建对象存储。我使用开发人员工具清除 PWA 中的所有数据并刷新,但同样的事情发生了。

如果我增加版本号,我的数据库版本会在浏览器中更新,但对象存储仍然没有被添加。

upgrade() 函数不会被调用。

我在开发的早期就遇到过这种情况,我修复了它,但我不记得是怎么回事。我觉得这实际上可能不是编码问题...

标签: progressive-web-appsindexeddb

解决方案


好的,我发现了问题。我向我的应用程序添加了一个日志记录机制,并且在我的升级代码之前运行了一些代码,该代码正在打开数据库以创建一个日志条目。因此,在调用我的升级方法之前,它正在创建数据库(没有对象存储)。我更改了我的开放数据库代码以始终包含升级方法来解决我的问题。


推荐阅读