evgeniy8705
@evgeniy8705
Повелитель вселенной

Как разобраться с IndexedDB?

Demo (Codepen)

Решил разобраться с indexedDB. открыл книгу, начал читать. Вроде как более менее понятно по началу.
Переписал код с книги, но запускаться сие чудо не хочет.
Такое чувство, что кажется что код вообще не правильно написан, по крайней мере с точки зрения синтаксиса...возможно он устарел. К тому же метода установки версии я в объекте IDBDatabase не нашел. Видимо его уже и нет там.
Сначала вылетала ошибка что db не найдена. Ладно...сделал переменную глобальной, уже не лучшая практика пошла...
Далее начала в консоль вылетать ошибка:
Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.

В общем, проверка версии явно уже не работает. По умолчанию базе присвоен был номер версии 1.
Из за этой "проверки версии", следовательно дальнейший код не выполняется...хранилище не создается, и транзакция не осуществляется...так как хранилища по сути то и нет. вызывать методы не у кого.

Подскажите как переписать данный код на актуальный синтаксис, как вообще запустить это хранилище...
Код
let db;

function initiate() {
  let databox = document.querySelector("#databox");
  let button = document.querySelector("#save");

  button.addEventListener("click", addObject, false);

  let request = indexedDB.open("mydatabase", 1);

  request.addEventListener("error", showerror, false);
  request.addEventListener("success", start, false);
}

function showerror(event) {
  alert(`Error: ${event.code} ${event.message}`);
}

function start(event) {
  console.log("start");

  db = event.result || event.target.result;

  console.log(db); // IDBDatabase {}

  if (db.version == "") {
    let request = db.setVersion("1.0");

    request.addEventListener("error", showerror, false);
    request.addEventListener("success", createDB, false);
  }
}

function createDB() {
  console.log("createDB");

  let objectStore = db.createObjectStore("movies", { keyPath: "id" });

  console.log(objectStore);

  objectStore.createIndex("SearchYear", "data", { unique: false });
}

function addObject() {
  console.log("addObject");

  let keyword = document.querySelector("#keyword").value;
  let title = document.querySelector("#text").value;
  let year = document.querySelector("#year").value;
  let transaction = db.transaction(["movies"], IDBTransaction.READ_WRITE);
  let objectStore = transaction.objectStore("movies");
  let request = objectStore.add({
    id: keyword,
    name: title,
    date: year
  });

  request.addEventListener("success", () => {
    show(keyword);
  }, false);

  document.querySelector("#keyword").value = "";
  document.querySelector("#text").value = "";
  document.querySelector("#year").value = "";
}

function show(keyword) {
  console.log("show");

  let transaction = db.transaction(["movies"]);
  let objectStore = transaction.objectStore("movies");
  let request = objectStore.get(keyword);

  request.addEventListener("success", showList, false);
}

function showList(event) {
  console.log("showList");

  let result = event.result || event.target.result;

  databox.innerHTML = `<div>${result.id} - ${result.bane} - ${result.date}</div>`;
}

window.addEventListener("load", initiate, false);

  • Вопрос задан
  • 2203 просмотра
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
А на кодепене не оно? Вроде работает же? Или я не так понял...
Ответ написан
@ollegat
У меня такая же ошибка была, поменял имя базы данных на нижний регистр и все заработало, хотя в данном случае имя базы и так в нижнем регистре...

вот похожая проблема: https://github.com/localForage/localForage/issues/91
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы