Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao executar a função adiciona() no console

Eu já revisei todo o código e não consegui achar o erro...

Esse é o erro que esta dando no console

Uncaught DOMException: Failed to execute 'add' on 'IDBObjectStore': The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
    at adiciona (http://localhost:3000/aprendendo_indexeddb.html:48:27)
    at <anonymous>:1:1

segue todo meu código:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Aprendendo IndexedDB</title>
</head>

<body>
  <script src="js/app/models/Negociacao.js"></script>

  <script>
    var connection;

    var openRequest = window.indexedDB.open('aluraframe', 3);

    openRequest.onupgradeneeded = e => {

      console.log('Cria ou altera um banco já existente');

      let minhaConnection = e.target.result;

      if (minhaConnection.objectStoreNames.contains('negociacoes')) {
        minhaConnection.deleteObjectStore('negociacoes');
      }
      minhaConnection.createObjectStore('negociacoes');
    };

    openRequest.onsuccess = e => {

      console.log('Conexão obtida com sucesso');

      connection = e.target.result;
    };

    openRequest.onerror = e => {
      console.log(e.target.error);
    }

    function adiciona() {

      let transaction = connection.transaction(['negociacoes'], 'readwrite');

      let store = transaction.objectStore('negociacoes');

      let negociacao = new Negociacao(new Date(), 200, 1);

      let request = store.add(negociacao);

      request.onsuccess = e => {

        console.log('Negociação incluída com sucesso');
      };

      request.onerror = e => {

        console.log('Não foi possível incluir a negociação');
      };
    }
  </script>
</body>

</html>

Já fui em "clear storage" do chrome e ja dei um "clear site data" e mesmo assim nada...

1 resposta
solução!

Fala ai Vinicius, tudo bem? Acho que faltou informar que as store's devem ter a key auto incrementada automaticamente, isso pode ser na função createObjectStore, no caso nesse trecho:

minhaConnection.createObjectStore('negociacoes');

Como segundo parâmetro você pode informar um objeto de opções:

minhaConnection.createObjectStore('negociacoes', { autoIncrement: true });

Com essa opção autoIncrement não é necessário que cada valor no add tenha a key manualmente setada.

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software