Bom dia, estou com um problema pra fazer a validação. Eu consigo fazer ele aparecer o erro, só que ele reseta todos os campos, e eu queria que continuasse todos os cados e só aparecesse o erro.
router.post("/categorias/edit", (req, res) => {
//Validação
var erros = []
if (!req.body.nome || typeof req.body.nome == undefined || req.body.nome == null) {
erros.push({ texto: "Nome inválido" })
}
if (!req.body.slug || typeof req.body.slug == undefined || req.body.slug == null) {
erros.push({ texto: "Slug inválido" })
}
if (req.body.nome.length < 2) {
erros.push({ texto: "Nome da categoria muito pequeno" })
}
if (erros.length > 0) {
res.render("admin/editcategorias", {categoria:categoria, erros:erros} )
} else {
Categoria.findOne({ _id: req.body.id }).then((categoria) => {
categoria.nome = req.body.nome
categoria.slug = req.body.slug
categoria.save().then(() => {
req.flash("success_msg", "Categoria editada com succedo")
res.redirect("/admin/categorias")
}).catch((err) => {
res.flash("error_msg", "Houve um erro ao interno ao salvar edição de categorias")
res.redirect("/admin/categorias")
})
}).catch((err) => {
req.flash("error_msg", "Houve um erro ao editar categoria")
res.redirect("/admin/categorias")
})
}
})
Parte do HTML
{{#each erros}}
<div class="alert alert-danger">{{texto}}</div>
{{else}}
{{/each}}
<h3>Editar categoria: </h3>
<div class="card">
<div class="card-body">
<form action="/admin/categorias/edit" method="POST">
<input type="hidden" name="id" value="{{categoria._id}}">
<label for="nome">Nome: </label>
<input type="text" id="nome" name="nome" placeholder="Nome da categorias" class="form-control" value="{{categoria.nome}}">
<label for="slug">Slug: </label>
<input type="text" id="slug" name="slug" placeholder="Slug da categoria" class="form-control" value="{{categoria.slug}}">
<br>
<button class="btn btn-success">Editar categoria</button>
</form>
</div>
</div>