indexedDB.open în JavaScript

Stocare și dispozitiv Toate browserele moderne

Deschide o bază de date în browser pentru volume mari de date structurate, inclusiv offline.

Sintaxă
const cerere = indexedDB.open(nume, versiune);
cerere.onupgradeneeded = () => { ... };
cerere.onsuccess = () => { const db = cerere.result; };

Ce face indexedDB.open

IndexedDB este o bază de date de tip cheie–valoare din browser: păstrează obiecte JavaScript întregi (nu doar texte, ca localStorage), are indexuri pentru căutare și poate stoca sute de MB. API-ul este asincron, bazat pe cereri și evenimente.

indexedDB.open(nume, versiune) deschide baza. Dacă versiunea este mai mare decât cea existentă, rulează întâi evenimentul upgradeneeded, unde creezi „depozitele” (createObjectStore). Datele se scriu și se citesc prin tranzacții. Multe proiecte folosesc o bibliotecă mică (de exemplu idb) care transformă cererile în promisiuni.

Parametri

Parametru Descriere
nume Numele bazei de date.
versiune Opțional. Un număr întreg; crește-l când schimbi structura.

Ce returnează

O cerere (IDBOpenDBRequest); baza de date este în cerere.result la succes.

Exemple

Exemplul 1: Notițe salvate offline

Rezultat la prima rulare.

const cerere = indexedDB.open("notite", 1);

cerere.onupgradeneeded = () => {
  cerere.result.createObjectStore("notite", { keyPath: "id", autoIncrement: true });
};

cerere.onsuccess = () => {
  const db = cerere.result;
  const tx = db.transaction("notite", "readwrite");
  tx.objectStore("notite").add({ text: "Cumpără lapte", creat: new Date() });
  tx.oncomplete = () => {
    db.transaction("notite").objectStore("notite").getAll().onsuccess = (e) => {
      console.log(e.target.result.length, e.target.result[0].text);
    };
  };
};

Rezultat în browser

1 Cumpără lapte

Greșeli frecvente

  • Încerci să creezi un depozit nou în onsuccess și primești InvalidStateError. Structura se schimbă doar în onupgradeneeded, cu o versiune mai mare.

Comenzi înrudite

  • localStorage: Salvează date în browserul vizitatorului, care rămân și după închiderea paginii.
  • navigator.serviceWorker.register / caches.open: Instalează un service worker (pentru funcționare offline și notificări push) și lucrează cu cache-ul lui.
  • structuredClone: Creează o copie completă (în adâncime) a unei valori: obiecte, tablouri, Date, Map, Set.