IndexedDB 错误:NotFoundError:无法在“IDBDatabase”上执行“事务”:找不到指定的对象存储之一

问题描述 投票:0回答:4

我在我的 ReactJs PWA 中创建了一个 IndexedDB 设置。

抛出以下错误:

NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.

在线

userSearchDBtx = userSearchDB.transaction("userdata","readwrite")

我的功能是这样的:

function Users() {
  let userSearchDB,userSearchDBstore,userSearchDBtx;
  let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);

useEffect(()=>{
  if (!window.indexedDB) {
      console.log("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
  }

  else console.log("IndexedDB supported")

  userDbrequest.onupgradeneeded = function(event) { 
    userSearchDB = event.target.result;
    userSearchDBtx = event.target.transaction;
    userSearchDBstore = userSearchDB.createObjectStore("userdata",{keyPath:"uid"})
  };

  userDbrequest.onerror = function(event) {
    console.log("ERROR: " + event.target.errorCode)
  };

  userDbrequest.onsuccess = function(event) {
    console.log("IndexdDb Working")
    userSearchDB = event.target.result
    userSearchDBtx = userSearchDB.transaction("userdata","readwrite");
    userSearchDBstore = userSearchDBtx.objectStore("userdata");
  };
  //Here also put is unknown
  userSearchDBstore.put({uid:3854238974,phone:3257777,name:"shan",email:"[email protected]"})

},[])

}
javascript reactjs indexeddb
4个回答
0
投票
let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);

将这一行放在 useEffect()

代码应该是

let userSearchDB,userSearchDBstore,userSearchDBtx,userDbrequest;

useEffect(()=>{
   userDbrequest = window.indexedDB.open("MyTestDatabase", 2);
   ...Conrinue your code
},[])

另外,在这样做的同时增加版本


0
投票

您在数据库连接之前调用

userSearchDBstore.put(...)
,这意味着不保证升级需要回调完成,这意味着不保证存储创建。

您需要等待。将 put 调用移动到打开数据库请求成功回调中,以便它仅在数据库升级后运行。


0
投票

我发现原因是商店名称错误:

const request = db .transaction(storeNames , "readwrite")


0
投票

这发生在我身上,因为我在

localhost:3000
。尝试在浏览器中访问
$ip:3000

您可以使用 Inspect -> Application -> Storage -> IndexedDB 在 Chrome 中检查您的数据库端点。

© www.soinside.com 2019 - 2024. All rights reserved.