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

Listagem de livros não é carregada

Após terminar de fazer os controladores, fui testar para ver se estava tudo certo porém dei de cara com um erro 500, quando tento acessar /livros. Apaguei o método lista do controlador e coloquei a função callback de volta onde estava, no app.get('/livros, função aqui) E tudo volta a funcionar normalmente.

Fiquei bastante tempo hoje tentando descobrir o porquê e não consegui.

https://github.com/vkindrat/vkindrat.github.io/tree/master/casadocodigo

2 respostas
solução!

Olá Vitor, tudo bem?

Eu fiz o clone do seu repositório para te ajudar e identifiquei o problema. Mas antes de te dizer o que aconteceu, vou te mostrar como descobri o problema pois isto pode ser útil para você no futuro.

Ao acessar a rota /livros, o servidor nos está respondendo com uma página de erro, portanto o código que está sendo executado está no src/config/custom-express.js que é onde está configurado o tratamento de erros:

app.use(function(erro,req,resp,next){
  return resp.status(500).marko(require('../app/views/base/erros/500.marko'))
})

Note que o primeiro parâmetro da função é chamado de erro, ou seja, podemos inspecionar o erro não tratado usando um console.log. Eu modifiquei esta função para eu conseguir identificar o problema e ficou assim:

app.use(function(erro,req,resp,next){
    console.log(erro);
  return resp.status(500).marko(require('../app/views/base/erros/500.marko'))
})

Após acessar a rota /livros novamente, vi que apareceu a seguinte mensagem no console: ReferenceError: LivroDao is not defined. Portanto em algum lugar o LivroDao não foi criado corretamente.

Como a rota /livros é executada pelo LivrosControlador.lista(), olhei este arquivo e faltou o require do ../infra/livroDao, assim como o require do ../../config/database.

Então adicionei as seguintes linhas no começo do arquivo src/app/controladores/controladores.js:

const LivroDao = require('../infra/livroDao');
const db = require('../../config/database');

E a listagem de livros voltou a funcionar normalmente :)

Obs: Estes require estavam no src/app/rotas/rotas.js, mas sem uso, então imagino que no exercício de criar o controlador, faltou colocar estas linhas arquivo do controlador.

Deu certo. Muito obrigado.

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