Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no id

Bom dia, estou com o seguinte erro !

Error: Render error. Exception: TypeError: Cannot read property 'id' of undefined
    at render (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\src\app\View\Livros\Form\Form.marko.js:25:41)
    at renderer (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\runtime\components\renderer.js:227:9)
    at safeRender (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\runtime\renderable.js:6:9)
    at Template.render (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\runtime\renderable.js:136:20)
    at ServerResponse.response.marko (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\express.js:58:29)
    at C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\src\app\Routes\rotas.js:50:29
    at AsyncStream.error (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\runtime\html\AsyncStream.js:441:13)
    at Timeout._onTimeout (C:\Users\Brickes\Documents\Estudos\ALURA\Nodejs\node_modules\marko\src\runtime\renderable.js:17:22)
    at listOnTimeout (internal/timers.js:531:17)
    at processTimers (internal/timers.js:475:7)

Arquivo Dão

buscarporId(body)
    {
        return new Promise((resolve, reject) =>
        {   
            this._instanciadb.get(`SELECT * FROM Livros WHERE  id =?`, 
            [body], 
            (erro, dados) =>
               {
                    if(erro)
                    {
                        return reject(console.log(erro));
                    }

                     return resolve(dados);
                } 
            );
        });
    }

Rotas js

app.get('/livros/form/:id', (req, res)=>{

        const id = req.params.id;
        console.log(id);
        livroDao.atualizar(id)
        .then(livros => res.marko(require('../View/Livros/Form/Form.marko'), 
        {
            livro: livros
        }

        )

        )
        .catch(erro => console.log("Deu Erro"+erro));

    });

Marko

<html>
    <body>
        <h1>Cadastro de livros</h1>

        <form action="/livros" method="post">

            <input type="hidden" id="id" name="id" value="${data.livro.id}" />

            <div>
                <label for="titulo">Titulo:</label>
                <input type="text" id="titulo" name="titulo" value="${data.livro.titulo}" placeholder="coloque o titulo" />
            </div>
            <div>
                <label for="preco">Preço:</label>
                <input type="text" id="preco" name="preco" value="${data.livro.preco}" placeholder="150.25" />
            </div>
            <div>
                <label for="descricao">Descrição:</label>
                <textarea cols="20" rows="10"  id="descricao" name="descricao" placeholder="fale sobre o livro">${data.livro.descricao}</textarea>
            </div>

            <input type="submit" value="Salvar" />
        </form>
    </body>
</html>
1 resposta
solução!

Na sua rota app.get('/livros/form/:id') você está chamando o livroDao.atualizar para depois redirecionar para a view "Form.marko".

Creio que o que você quer (ao chamar a rota por GET) é pesquisar o ID do produto, e fazer o update se a rota for chamada por POST (com os dados do formulário).

Me parece que no caso da rota com GET, o que você quer é utilizaro o "livroDao.buscaPorId(req.params.id)"