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

Express Route Post()

Após condensar as rotas de livros usando o express route, estou com o seguinte erro:

Error: Route.post() requires a callback function but got a [object Undefined]

Notei que o post necessita de um callback mas no exemplo praticado no video nao tem.

Abaixo, meu arquivo livro-rotas.js

module.exports = (app) => { const rotasLivro = LivroControlador.rotas(); app.get(rotasLivro.lista, livroControlador.lista());

app.route(rotasLivro.cadastro)
.get(livroControlador.formularioCadastro())
.post(Livro.validacoes(), livroControlador.adiciona())
.put( Livro.validacoes(), livroControlador.atualiza());

app.get(rotasLivro.edicao, livroControlador.buscarPorId());

app.delete(rotasLivro.delecao, livroControlador.deleta());

};

5 respostas

Fala aí Daniel, tudo bem? O problema é seu código está passando um objeto para o callback, onde, deveria passar uma função.

Dê uma olhada nos retornos de cada chamada do livroControlador, acredito ser algo nele.

Espero ter ajudado.

solução!

Boa noite, Daniel! Como vai?

Como o Matheus já comentou, parece que o problema está no arquivo livro-controlador.js! Provavelmente o método adiciona() da classe LivroControlador não está retornando uma função como eu fiz durante o curso! Dê uma conferida nisso e faça as correções que forem necessárias!

Caso o problema persista, por favor, cole o código da classe LivroControlador aqui no tópico para que possamos dar uma olhada!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Olá Matheus e Gabriel, bom dia.

Meus amigos, fiz o seguinte procedimento:

Avancei para a aula seguinte, baixei o codigo fonte mais recente e rodei com sucesso.

Copiei o conteúdo do meu arquivo livro-controlador e livro-rotas, e para minha surpresa, funcionou corretamente kkkk

Uma diferença que ficou entre as 2 versoes e mesmo assim funciona, é na no metódo adiciona que o objeto livro recebe o req.body e no exemplo que peguei da aula seguinte simplesmente é um objeto entre {};

cadastra() {
    return function(req, resp) {
        console.log(req.body);
        const livroDao = new LivroDao(db);

        const erros = validationResult(req);

        if (!erros.isEmpty()) {
            return resp.marko(
                templates.livros.form,
                { 
                    livro: req.body, 
                    errosValidacao: erros.array()
                }
            );
        }

        livroDao.adiciona(req.body)

                // agora o redirecionamento é feito utilizando o método
                // estático que encapsula as URLs das rotas.
                .then(resp.redirect(LivroControlador.rotas().lista))
                .catch(erro => console.log(erro));
    };
}

De toda forma, esta funcionando. Obrigado pela ajuda. Seguimos...

Muito bem, Daniel! Como eu te falei, aparentemente o seu arquivo de rotas estava correto! O problema realmente deveria estar na classe LivroControlador!

Mas, como agora tudo está resolvido, é seguir em frente no sertão do Node e avançar rumo à luz do conhecimento!

Grande abraço e bons estudos, meu aluno!

Boa Daniel, fico feliz que tenha conseguido resolver o problema.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.