5
respostas

professor, ou alguem me tira das trevas??? HAHAHA

quando submeto o formulário para adc um novo livro, está dando erroe no terminal está aparecendo: "livro is not defined"

não consigo encontrar o erro :/

const LivroDao = require('../infra/livro-dao');
const db = require('../../config/database');

module.exports = (app) => {
    app.get('/', function(req, resp) {
        resp.send(
            `
                <html>
                    <head>
                        <meta charset="utf-8">
                    </head>
                    <body>
                        <h1> Casa do Código </h1>
                    </body>
                </html>
            `
        );
    });

    app.get('/livros', function(req, resp) {

        const livroDao = new LivroDao(db);
        livroDao.lista()
                .then(livros => resp.marko(
                    require('../views/livros/lista/lista.marko'),
                    {
                        livros: livros
                    }
                ))
                .catch(erro => console.log(erro));
        // livroDao.lista(function(erro, resultados) {

        //     resp.marko(
        //         require('../views/livros/lista/lista.marko'),
        //         {
        //             livros: resultados
        //         }
        //     );

        // });
    });

    app.get('/livros/form', function (req, resp) {
        resp.marko(require('../views/livros/form/form.marko')); 
    });

    app.post('/livros', function (req, resp) {
        console.log(req.body);
        const livroDao = new LivroDao(db);
        livroDao.adiciona(req.body)
                .then(resp.redirect('/livros'))
                .catch(erro => console.log(erro));

    });
};
5 respostas
class LivroDao {

    constructor(db) {
        this._db = db;
    }

    adiciona(livros) {
        return new Promise((resolve, reject) => {
            this._db.run(`
                INSERT INTO LIVROS (
                    titulo,
                    preco,
                    descricao
                ) values (?, ?, ?)
                `,
                [
                    livro.titulo,
                    livro.preco,
                    livro.descricao
                ], 
                function (err) {
                    if (err) {
                        console.log(err);
                        return reject('Não foi possivel adicionar o livro');
                    }

                    resolve();

                }
            )
        });
    }

    lista() {
        return new Promise((resolve, reject) => {
            this._db.all(
                'SELECT * FROM livros',
                (erro, resultados) => {
                    if (erro) return reject('Não foi possível listar os livros!');

                    return resolve(resultados);
                }
            )
        });
    }
}

module.exports = LivroDao;

Pelo que eu vi do seu código, quando você faz o POST, ele redireciona para a rota /livros (GET). Eu vi que no seu código você abre um arquivo lista.marko se houver sucesso na consulta do LivroDAO, e manda para este arquivo, uma varíavel chamada "livros".

O que pode estar acontecendo, no seu arquivo "lista.marko", é que você deve estar chamando esta variável como "livro", isso vai dar um erro de undefined se você tentar usar para fazer um loop. A variável tem que ter o mesmo nome daquela definida na rota, ou seja, "livros".

Acho que não é esse o erro, ja mudei e o erro persiste!!! diz que livro is not defined :(

encontrei o erro!!! Obrigada. :D

Lurian, só vi seu post agora! Mas fico feliz que tenha conseguido sair das trevas! Inclusive, vc poderia compartilhar o que solucionou o seu caso para que os demais colegas possam ter a resposta caso venham a ter o mesmo problema?

Espero que esteja curtindo e aproveitando ao máximo todo o conteúdo do curso!

Grande abraço e bons estudos!