Primera vez que intento usar indexedDB. Intento crear una tienda de objetos, pero recibo el error que se comparte a continuación. Nunca antes había usado indexeddb en sveltekit, así que no tengo idea de cómo solucionarlo.
Creé un sveltekit básico siguiendo los pasos descritos en su documento. En index.svelte, importé onMount fn y escribí lo siguiente
importar { getContext, onMount } desde 'esbelto'; import { detach_before_dev } from 'svelte/internal';
onMount(async () => { const request = indexedDB.open("okdb", 1) request.onerror = (event) => { console.error('Database error:' , event); }; request.onsuccess = (event) => { console.log("onsuccess log :", event) let db = event.target.result; // create the Contacts object store // with auto-increment id let store = db.createObjectStore('Contacts', { autoIncrement: true }); }; })Obtuve el siguiente error:
index.svelte? [sm]:42 Uncaught DOMException: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction. at IDBOpenDBRequest.request.onsuccess (http://localhost:5000/src/routes/index.svelte:121:19)Veo la base de datos creada en la pestaña de la aplicación de herramientas de desarrollo, pero aparece el error anterior cada vez que intento crear createObjectStore. Parece un procedimiento sencillo de creación de objetos y no debería dar ningún error.
¿Alguna idea de por qué o cómo solucionarlo? No necesito importar la aplicación/navegador evn desde el sveltekit, ¿verdad?
Después de leer el documento, está claro que onupgradeneeded debe incluir una nueva versión para desencadenar la creación de ObjectStore.
Aumentar la versión de db
const request = indexedDB.open("okdb", 2)Se activará cuando se necesite una actualización, lo que le permitirá crear ObjectStore de esta manera:
let customerData = [ {ssn:"444-44-4444",name:"Bill",age:35,email:"bill@company.com"}, {ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}, {ssn:"666-66-6666",name:"Simone",age:10,email:"Simone@home.org"} ]; request.onupgradeneeded = function(event) { let db = event.target.result console.log("onupgadeneeded log :", event.target.result) //adding new objectstore var objectStore5 = db.createObjectStore("customers5",{keyPath:"ssn"}); objectStore5.createIndex("name","name",{unique:false}); objectStore5.createIndex("email","email",{unique:true}); for(var i in customerData){ objectStore5.add(customerData[i]); }Luego, desde allí, puede realizar el resto de las operaciones básicas.
var transaction = db.transaction(["customers"], "readwrite"); // Do something when all the data is added to the database. transaction.oncomplete = event => { console.log("All done!"); }; transaction.onerror = event => { // Don't forget to handle errors! }; var objectStore = transaction.objectStore("customers"); customerData.forEach(customer => { var request = objectStore.add(customer); request.onsuccess = event => { // event.target.result === customer.ssn; };});