Al crear aplicaciones web modernas, especialmente aplicaciones web progresivas (PWA), es fundamental tener una forma de almacenar datos sin conexión. IndexedDB es una poderosa base de datos del lado del cliente que permite que las aplicaciones web almacenen y recuperen datos, incluso cuando el usuario no está conectado. Esta guía lo guiará a través de los conceptos básicos de IndexedDB y le mostrará cómo crear, leer, actualizar y eliminar datos (operaciones CRUD) dentro de su aplicación web.
IndexedDB es una API de bajo nivel para el almacenamiento del lado del cliente de grandes cantidades de datos estructurados, incluidos archivos y blobs. A diferencia de localStorage, IndexedDB le permite almacenar tipos de datos complejos, no solo cadenas. Utiliza un modelo de base de datos transaccional asíncrono, lo que lo hace potente para aplicaciones que necesitan manejar grandes conjuntos de datos o sincronización de datos fuera de línea.
Profundicemos en los pasos principales para trabajar con IndexedDB. Cubriremos:
Para interactuar con IndexedDB, primero debe abrir una conexión a la base de datos. Si la base de datos no existe, se creará.
const request = indexedDB.open('MyCustomersDatabase', 1); request.onerror = (event) => { console.error('Database error:', event.target.errorCode); }; request.onsuccess = (event) => { const db = event.target.result; console.log('Database opened successfully', db); }; request.onupgradeneeded = (event) => { const db = event.target.result; if (!db.objectStoreNames.contains('customers')) { const objectStore = db.createObjectStore('customers', { keyPath: 'id' }); objectStore.createIndex('name', 'name', { unique: false }); objectStore.createIndex('email', 'email', { unique: true }); console.log('Object store created.'); } };
Esto es lo que está pasando:
Ahora que tenemos nuestra base de datos y almacén de objetos configurados, agreguemos algunos datos.
const addCustomer = (db, customer) => { const transaction = db.transaction(['customers'], 'readwrite'); const objectStore = transaction.objectStore('customers'); const request = objectStore.add(customer); request.onsuccess = () => { console.log('Customer added:', customer); }; request.onerror = (event) => { console.error('Error adding customer:', event.target.errorCode); }; } const customer = { id: 1, name: 'John Doe', email: '[email protected]' }; request.onsuccess = (event) => { const db = event.target.result; addCustomer(db, customer); };
Esto es lo que está pasando:
Leer datos de IndexedDB también es sencillo. Recuperemos el cliente que acabamos de agregar usando el método get().
const getCustomer = (db, id) => { const transaction = db.transaction(['customers'], 'readonly'); const objectStore = transaction.objectStore('customers'); const request = objectStore.get(id); request.onsuccess = (event) => { const customer = event.target.result; if (customer) { console.log('Customer found:', customer); } else { console.log('Customer not found.'); } }; request.onerror = (event) => { console.error('Error fetching customer:', event.target.errorCode); }; } request.onsuccess = (event) => { const db = event.target.result; getCustomer(db, 1); // Fetch customer with ID 1 };
Para actualizar un registro existente, podemos usar el método put(), que funciona de manera similar a add() pero reemplaza el registro si la clave ya existe.
const updateCustomer = (db, customer) => { const transaction = db.transaction(['customers'], 'readwrite'); const objectStore = transaction.objectStore('customers'); const request = objectStore.put(customer); request.onsuccess = () => { console.log('Customer updated:', customer); }; request.onerror = (event) => { console.error('Error updating customer:', event.target.errorCode); }; } const updatedCustomer = { id: 1, name: 'Jane Doe', email: '[email protected]' }; request.onsuccess = (event) => { const db = event.target.result; updateCustomer(db, updatedCustomer); };
Finalmente, para eliminar un registro, use el método eliminar().
const deleteCustomer = (db, id) => { const transaction = db.transaction(['customers'], 'readwrite'); const objectStore = transaction.objectStore('customers'); const request = objectStore.delete(id); request.onsuccess = () => { console.log('Customer deleted.'); }; request.onerror = (event) => { console.error('Error deleting customer:', event.target.errorCode); }; } request.onsuccess = (event) => { const db = event.target.result; deleteCustomer(db, 1); // Delete customer with ID 1 };
IndexedDB es una solución sólida para manejar el almacenamiento de datos del lado del cliente, especialmente en aplicaciones web sin conexión. Siguiendo esta guía, aprenderá cómo:
Con IndexedDB, puedes crear aplicaciones web más resistentes que almacenen datos localmente y funcionen incluso sin conexión a Internet.
Documentos web de MDN: API IndexedDB
Una guía completa sobre cómo funciona IndexedDB, sus métodos API y casos de uso.
Guía de MDN IndexedDB
Desarrolladores de Google: IndexedDB
Un artículo detallado que cubre las mejores prácticas y el uso de IndexedDB para crear aplicaciones web con capacidad sin conexión.
Desarrolladores de Google: IndexedDB
API de base de datos indexada W3C
La especificación oficial del W3C que describe la implementación técnica y la estructura de IndexedDB.
Especificaciones de IndexedDB del W3C
¡Estos recursos proporcionarán profundidad y contexto adicionales si deseas explorar más sobre IndexedDB más allá de este tutorial!
¡Feliz codificación!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3