Ao criar aplicativos web modernos, especialmente aplicativos web progressivos (PWAs), é crucial ter uma maneira de armazenar dados offline. IndexedDB é um poderoso banco de dados do lado do cliente que permite que aplicativos da web armazenem e recuperem dados, mesmo quando o usuário está offline. Este guia orientará você nos fundamentos do IndexedDB, mostrando como criar, ler, atualizar e excluir dados (operações CRUD) em seu aplicativo da web.
IndexedDB é uma API de baixo nível para armazenamento no lado do cliente de grandes quantidades de dados estruturados, incluindo arquivos e blobs. Ao contrário do localStorage, o IndexedDB permite armazenar tipos de dados complexos, não apenas strings. Ele usa um modelo de banco de dados transacional assíncrono, o que o torna poderoso para aplicativos que precisam lidar com grandes conjuntos de dados ou sincronização de dados offline.
Vamos mergulhar nas etapas principais para trabalhar com IndexedDB. Cobriremos:
Para interagir com o IndexedDB, primeiro você precisa abrir uma conexão com o banco de dados. Se o banco de dados não existir, ele será criado.
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.'); } };
Aqui está o que está acontecendo:
Agora que configuramos nosso banco de dados e armazenamento de objetos, vamos adicionar alguns dados a eles.
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); };
Aqui está o que está acontecendo:
A leitura de dados do IndexedDB também é simples. Vamos recuperar o cliente que acabamos de adicionar usando o 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 atualizar um registro existente, podemos usar o método put(), que funciona de forma semelhante a add(), mas substitui o registro se a chave já existir.
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 excluir um registro, use o método delete().
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 é uma solução robusta para lidar com armazenamento de dados do lado do cliente, especialmente em aplicativos da web offline. Seguindo este guia, você aprendeu como:
Com o IndexedDB, você pode criar aplicativos da web mais resilientes que armazenam dados localmente e funcionam mesmo sem uma conexão com a Internet.
MDN Web Docs - API IndexedDB
Um guia completo sobre como o IndexedDB funciona, seus métodos de API e casos de uso.
Guia de banco de dados indexado MDN
Google Developers - IndexedDB
Um artigo detalhado que aborda as práticas recomendadas e o uso do IndexedDB para criar aplicativos da web com capacidade off-line.
Desenvolvedores do Google - IndexedDB
API de banco de dados indexado W3C
A especificação oficial do W3C descrevendo a implementação técnica e estrutura do IndexedDB.
Especificação de banco de dados indexado W3C
Esses recursos fornecerão profundidade e contexto adicionais se você quiser explorar mais sobre o IndexedDB além deste tutorial!
Boa codificação!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3