-1
I can’t see the mistake that keeps me from POST (store the data in the database). Also, in the form when selecting a country he should only take his cities, instead he calls all cities and consequently all municipalities. Anyone with any ideas, please help! Thank you.
Model:
const mongoose = require("mongoose")
const Schema = mongoose.Schema
const Empresa = new Schema({
name: {
type: String,
required: true
},
slug: {
type: String,
required: true
},
county: {
type: Schema.Types.ObjectId,
ref: "coutries",
required: true
},
city: {
type: Schema.Types.ObjectId,
ref: "cities",
required: true
},
municipality: {
type: Schema.Types.ObjectId,
ref: "municipalities",
required: true
},
date: {
type: Date,
default: Date.now()
}
})
mongoose.model("empresas", Empresa)
Routa / GET:
router.get('/empresas/add', async function(req, res) {
try {
const [countries, cities, municipalities] = await Promise.all([Country.find(), City.find(), Municipality.find()]);
res.render('ferramentas/addempresas', { countries: countries, cities: cities, municipalities: municipalities});
} catch(err) {
req.flash('error_msg', 'Houve um erro ao carregar o formulário');
res.redirect('/ferramentas/empresas');
};
});
Routa / POST:
router.post("/empresas/nova", function(req, res){
var erros = []
if(!req.body.name || typeof req.body.name == undefined || req.body.name == 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.country == "0"){
erros.push({texto: "País inválido, crie um país"})
}
if(req.body.city == "0"){
erros.push({texto: "Cidade inválida, crie uma cidade"})
}
if(req.body.municipality == "0"){
erros.push({texto: "Município inválido, crie antes um município"})
}
if(erros.length > 0){
res.render("ferramentas/empresas", {erros: erros})
}else{
const novaEmpresa = {
name: req.body.name,
slug: req.body.slug,
country: req.body.country,
city: req.body.city,
municipality: req.body.municipality
}
new Empresa(novaEmpresa).save().then(function(){
req.flash("sucesso_msg", "Empresa criada com sucesso!")
res.redirect("/ferramentas/empresas")
}).catch(function(err){
console.log(err)
req.flash("error_msg", "Houve um erro ao salvar a empresas, tente novamente!")
res.redirect("/ferramentas/empresas")
})
}
})
HTML:
<form action="/ferramentas/empresas/nova" method="POST">
<div class="modal-body">
<h6 class="card-inside-title">Nome:</h6>
<div class="row clearfix">
<div class="col-sm-12">
<div class="form-group">
<input type="text" id="name" name="name" class="form-control" placeholder="Escreva o nome do município" autocomplete="off" required/>
</div>
</div>
</div>
<h6 class="card-inside-title">Slug:</h6>
<div class="row clearfix">
<div class="col-sm-12">
<div class="form-group">
<input type="text" id="slug" name="slug" class="form-control" placeholder="Escreva o slug da município" autocomplete="off" required />
</div>
</div>
</div>
<h6 class="card-inside-title">País:</h6>
<div class="row clearfix">
<div class="col-sm-12">
<div class="form-group" style="margin: 0 -18px 0 -18px">
<select name="country" class="form-control">
<option>Selecione o país</option>
{{#each countries}}
<option value="{{_id}}">{{name}}</option>
{{else}}
<option value="0">Sem país registrado</option>
{{/each}}
</select>
</div>
</div>
</div>
<h6 class="card-inside-title">Cidade:</h6>
<div class="row clearfix">
<div class="col-sm-12">
<div class="form-group" style="margin: 0 -18px 0 -18px">
<select name="city" class="form-control">
<option>Selecione a cidade</option>
{{#each cities}}
<option value="{{_id}}">{{name}}</option>
{{else}}
<option value="0">Sem cidade registrada</option>
{{/each}}
</select>
</div>
</div>
</div>
<h6 class="card-inside-title">Município:</h6>
<div class="row clearfix">
<div class="col-sm-12">
<div class="form-group" style="margin: 0 -18px 0 -18px">
<select name="municipality" class="form-control">
<option>Selecione o local</option>
{{#each municipalities}}
<option value="{{_id}}">{{name}}</option>
{{else}}
<option value="0">Sem município registrado</option>
{{/each}}
</select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success btn-round waves-effect">GUARDAR</button>
</div>
</form>
Your URL of the POST route is /companies/new and the one you are sending the form post is /tools/companies/new are different urls, put /tools/companies/new at the post route url
– Anderson Henrique
@Anderson, you can use middleware to organize your routes. I think it’s safe to assume that a middleware redirects to this module if "tools" are at the base of the URL, there’s nothing wrong with the route.
– Andre
I know, but I don’t see any middleware over there
– Anderson Henrique
I’m using Middleware, I just didn’t put it on this pole.
– Horácio Pedrosa