IndexedDB 未捕获的DOM异常:无法对“IDBObjectStore”执行“put”:评估对象存储区的密钥路径时未按请求生成值,如果成功

mzaanser  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(397)

我正在尝试使用indexedDB存储一些应用程序数据

"这是我的密码"

function _getLocalApplicationCache(_, payload) {
const indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.shimIndexedDB;
if (!indexedDB) {
    if (__DEV__) {
        console.error("IndexedDB could not found in this browser.");
    }
}

const request = indexedDB.open("ApplicationCache", 1);
request.onerror = event => {
    if (__DEV__) {
        console.error("An error occurred with IndexedDB.");
        console.error(event);
    }
    return;
};

request.onupgradeneeded = function () {
    const db = request.result;
    const store = db.createObjectStore("swimlane", {keyPath: "id", autoIncrement: true});
    store.createIndex("keyData", ["name"], {unique: false});
};

request.onsuccess = () => {
    // creating the transition
    const db = request.result;
    const transition = db.transaction("swimlane", "readwrite");

    // Reference to our object store that holds the swimlane data;
    const store = transition.objectStore("swimlane");
    const swimlaneData = store.index("keyData");

    payload = JSON.parse(JSON.stringify(payload));
    store.put(payload);

    const Query = swimlaneData.getAll(["keyData"]);

    Query.onsuccess = () => {
        if (__DEV__) {
            console.log("Application Cache is loaded", Query.result);
        }
    };
    transition.oncomplete = () => {
        db.close();
    };
};

}

**如果我使用不同的版本,那么1在这里--〉indexedDB.open(“应用程序缓存”,1);**我得到了一个错误,好像keyPath已经存在。除了版本1之外,我得到了这个错误。

"有人能帮我做错事吗"

wtlkbnrh

wtlkbnrh1#

  • 查看有关使用indexedDB的介绍性材料。
  • 如果您执行了某些操作,例如连接并创建了一个没有模式的数据库,或者创建了一个没有显式密钥路径的对象存储,然后存储了一些对象,接着编辑了upgradeneded回调以指定密钥路径,然后由于您继续使用当前版本号而不是较新的版本号,而从未触发upgradeneded回调运行,则可能是此错误的一种解释。
  • 升级所需的回调需要具有检查对象存储和索引是否已存在的逻辑,并仅在它们不存在时创建它们。如果存储不存在,则创建它及其索引。如果存储存在但索引不存在,则向存储添加索引。如果存储存在但索引存在,则不执行任何操作。
  • 您需要触发需要升级的回调,以便在通过使用更高的版本号进行连接来更改数据库方案之后运行。如果不使用更高的版本号进行连接,回调将永远不会运行,因此您最终将连接到方案未发生更改的旧版本。

相关问题