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

TypeError: Cannot read property 'titulo' of undefined

Bom dia,

Vi que já tem uma pergunta dessa, porém a solução dele não resolveu a minha :(

Estou tomando o seguinte erro no terminal e não estou conseguindo solucionar, baixei o seu projeto e copiei os arquivos e ainda assim não consegui!

TypeError: Cannot read property 'titulo' of undefined at Promise (C:\Users\User\Documents\Alura\Alura - NodeJS\src\app\infra\livro-dao.js:16:27) at new Promise () at LivroDAO.adiciona (C:\Users\User\Documents\Alura\Alura - NodeJS\src\app\infra\livro-dao.js:7:16) at C:\Users\User\Documents\Alura\Alura - NodeJS\src\app\rotas\rotas.js:39:18 at Layer.handle [as handle_request] (C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\layer.js:95:5) at C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\User\Documents\Alura\Alura - NodeJS\node_modules\express\lib\router\index.js:335:12)

Segue abaixo o link do drive para download do projeto https://drive.google.com/drive/u/0/folders/1oOYhPV4HUIokL_F-Vgpey9VfJNTWCn_z

5 respostas

Eduardo, boa tarde!

Eu fiz download do seu projeto mas estou recebendo um erro você poderia disponibilizar via github?

Aguardo sua resposta e bons estudos!

Segue o link do git:

https://github.com/maxtrodaro/nodejs-alura

solução!

No arquivo de rotas ( nodejs-alura/src/app/rotas/rotas.js ) na linha 39 no método adiciona esta faltando passar os parâmetros (req.body) dos dados a serem inseridos pelo DAO.

Esta assim :

 app.post('/livros', function (req, resp){
        console.log(req.body)
        const livroDao = new LivroDao(db);

        livroDao.adiciona()
                .then(resp.redirect('/livros'))
                .catch(erro => console.log(erro));
    })

Tenta deixar assim :

 app.post('/livros', function (req, resp){
        const livroDao = new LivroDao(db);

        livroDao.adiciona(req.body)
                .then(resp.redirect('/livros'))
                .catch(erro => console.log(erro));
    })

É só incluir o req.body como parâmetro no método adiciona do livroDao

Boa tarde, Eduardo! Como vai?

Como o log de erro diz, vc está tentando acessar a proprieddade titulo a partir de um valor undefined na linha 16 do arquivo livro-dao.js. Essa linha 16 diz respeito ao método adiciona() que é invocado no momento do cadastro de um livro. Daí, indo no arquivo rotas.js vc verá que está fazendo o seguinte a partir da linha 39 desse arquivo.

livroDao.adiciona()
         .then(resp.redirect('/livros'))
         .catch(erro => console.log(erro));

Perceba que vc está invocando o método adiciona() sem passar o livro que deve ser adicionado! É isso que está causando o problema!

Dê uma olhada nessa aula onde eu mostro como pegar da requisição as informações relativas ao livro e passar para o LivroDao.

Obs.: Percebi no seu repositório do github que vc compartilhou a pasta node_modules. Contudo, não é boa prática versionar e compartilhar essa pasta uma vez que ela é bem pesada e carrega as bibliotecas do seu projeto específicas para o sistema operacional que vc está utilizando!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Muito obrigado pessoal! Irei me atentar nesses pontos!