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

errosValidacao is not defined

Mesmo depois de colocar a variavel no arquivo das rotas eu continuo com esse erro:

ReferenceError: C:\Users\Gisele\Documents\Alura\Node\casadocodigo\app\views\produtos\form.ejs:5 3|

4|

5| <%if(errosValidacao){%> 6|

  • 7| <%for(var i=0;i 8|
  • <%=errosValidacao[i].param%> - <%=errosValidacao[i].msg%>
  • errosValidacao is not defined at eval (eval at (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:491:12), :11:10) at returnedFn (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:520:17) at View.exports.renderFile [as engine] (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:374:31) at View.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\view.js:126:8) at tryRender (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\application.js:639:10) at EventEmitter.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\application.js:591:3) at ServerResponse.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\response.js:960:7) at C:\Users\Gisele\Documents\Alura\Node\casadocodigo\app\routes\produtos.js:24:11 at Layer.handle [as handle_request] (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\layer.js:95:5) at C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\index.js:277:22 at Function.process_params (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\index.js:330:12) at next (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\router\index.js:271:10) at C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express-validator\lib\express_validator.js:355:5

    form.ejs

    <html>
    <body>
      <form action="/produtos/salva" method="post">
        <div class='erros'>
          <%if(errosValidacao){%>
            <ul>
              <%for(var i=0;i<errosValidacao.length;i++){%>
                <li><%=errosValidacao[i].param%> - <%=errosValidacao[i].msg%></li>
                <%}%>
              </ul>
              <%}%> 
            </div>
            <div>
              <label for="titulo">Titulo</label>
              <input type="text" id="titulo" name="titulo" placeholder="coloque o titulo"/>
            </div>
            <div>
              <label for="preco">Preço</label>
              <input type="text" id="preco" name="preco" placeholder="coloque o preco"/>
            </div>
            <div>
              <label for="descricao">Descrição</label>
              <textarea cols="20" id="descricao" name="descricao" placeholder="coloque a descrição"></textarea>
            </div>
            <input type="submit" value="gravar" />
          </form>
        </body>
        </html>

    produtos.js

    module.exports = function(app) {
       var listaProdutos = function(req,res){
           var connection = app.infra.connectionFactory();
            var produtosBanco = new app.infra.ProdutosDAO(connection);
    
            produtosBanco.lista(function(erros, resultados){
                 res.format({
                    html: function(){
                        res.render("produtos/lista",{lista:resultados});
                    },
                    json: function(){
                        res.json(resultados);
                    }
                });
            });
    
            connection.end();
       };
    
    
        app.get("/produtos", listaProdutos);
    
        app.get('/produtos/form', function(req,res){
          res.render('produtos/form');
        });
        app.post('/produtos/salva', function(req,res){
    
            var produto = req.body;
    
            req.assert('titulo','Titulo é obrigatório').notEmpty()
            req.assert('preco','Formato inválido').isFloat()
    
            var erros = req.validationErrors();
            if(erros){
              res.render('produtos/form',{errosValidacao:erros});
              return;
            }
    
            var connection = app.infra.connectionFactory();
            var produtosDAO = new app.infra.ProdutosDAO(connection);
            produtosDAO.salva(produto, function(erros, resultados){
                console.log(erros);
                res.redirect('/produtos');
            });
        })
    }
2 respostas
solução!

Isso ocorre pelo seguinte, essa variável chamada "errosValidacao" somente está sendo enviada para a view "produtos/form" quando ocorre algum erro. Neste caso, foi quando você usou a rota "/produtos/salva" (POST).

Você utiliza a mesma view ao abrir o formulário, usando a rota "/produtos/form" (GET)

Neste caso, você precisa criar a variável vazia e enviar para a view.

Faça a seguinte alteração nesta rota:

app.get('/produtos/form', function(req,res){
      res.render('produtos/form', {errosValidacao:{}});
    });

Obrigada.

Arrumei, funcionou. Mas eu fiz algo diferente do curso? Eu estava seguindo um passo a passo, porque essa diferença?