Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao executar a função adiciona()

Olá, estou recebendo esta mensagem de erro ao executar a função adiciona() no console do navegador:

aprendendo_indexeddb.html:38 Uncaught TypeError: Cannot read property 'transaction' of undefined
    at adiciona (aprendendo_indexeddb.html:38)
    at <anonymous>:1:1

Já conferi com o código da aula e o disponibilizado na aula seguinte e, para mim, parecem iguais, então não entendo porquê estou estou tendo um erro diferente do apresentado na aula.

Meu código:

<!DOCTYPE html>
<html lang="en">
<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; 
            minhaConnection.createObjectStore('negociações');
        };

        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(), 1, 200);
            let request = store.add(negociacao);

            request.onsuccess = e => {
                console.log("Negociação incluida com sucesso.");
            };

            request.onerror = e => {
                console.log("Não foi possível incluir a negociação.");
            };
        } 

    </script>
</body>
</html>
2 respostas
solução!

Olá Lavousier, tudo bem com você?

Você cometeu apenas um erro de digitação :)

Esse erro está acontecendo porque você criou a sua object store com o seguinte nome:

minhaConnection.createObjectStore('negociações');

Então nosso banco de dados tem o negociações

Entretanto quando você decide buscar o dado, você utiliza negociacoes:

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

Por convenção eu recomendo você tirar o ç e os acentos e utilizar apenas negociacoes :)

Abraços e Bons Estudos!

Era esse mesmo o problema! hahahaha Olhei tantas vezes o código e não tava conseguindo enxergar, pelo menos agora está resolvido. Obrigado pela ajuda!