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

Erro ao excutar adiciona();

toda vez que eu executo a função adiciona() aparece o seguinte erro:

aprendendo_indexdb.html:47 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 (file:///Users/alexander/Desktop/javascript-avancado-i-aula1/aluraframe/client/aprendendo_indexdb.html:47:33)
    at <anonymous>:1:1

código:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <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', { autoIncrement: true });
        };

        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>
1 resposta
solução!

Bom dia!

Durante o curso, esse erro acontece de propósito para que o aluno entenda que deve haver um identificador para cada objeto. Então, o aluno aprende:

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

Ele é informado que para que a alteração entre em vigor, é necessário mudar a versão do banco para que ele seja recriado.

Ao que tudo indica (sem olhar o seu código como um todo), você fez a alteração, mas não mudou a versão do banco, logo, a modificação não foi aplicada.

Então, experimente atualizar a versão do banco e realizar a operação novamente.