Olá, não estou conseguindo fazer com a mensagem de erro apareça para o usuário.
Não esta gravando no banco então quer dizer que a validação esta funcionado.
express.js
var express = require('express');
var load = require('express-load');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
module.exports = function(){
var app = express();
app.set('view engine','ejs');
app.set('views','./app/views');
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(expressValidator());
load('routes', {cwd: 'app'})
.then('infra')
.into(app);
return app;
}
produtos.js
module.exports = function(app){
var listaProdutos = function(req,res){
var connection = app.infra.connectionFactory();
var ProdutosDAO = new app.infra.ProdutosDAO(connection);
ProdutosDAO.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',{errosValidacao:{}});
});
app.post('/produtos',function(req,res){
var livro = 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(livro,function(erros,resultados){
res.redirect('/produtos');
});
});
}
form.ejs
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Formulario</title>
</head>
<body>
<div class='erros'>
<%if(errosValidacao){%>
<ul>
<%for(var i=0;i<errosValidacao.legth;i++){%>
<li><%=errosValidacao[i].param%> - <%=errosValidacao[i].msg%></li>
<%}%>
</ul>
<%}%>
</div>
<form action="/produtos" method="post">
<div>
<label for="titulo">Titulo</label>
<input type="text" name="titulo" placeholder="Coloque o titulo do livro" id="titulo">
</div>
<div>
<label for="preco">Preço</label>
<input type="text" name="preco" placeholder="Coloque o preco do livro 150.25" id="preco">
</div>
<div>
<label for="descricao">Descrição</label>
<textarea name="descricao" id="descricao" rows="8" cols="40" placeholder="Coloque aqui a descricao do livro"></textarea>
</div>
<div>
<input type="submit" value="gravar">
</div>
</form>
</body>
</html>