1
Hello, I recently started learning Node.js and I’m using Mongoose to integrate with db 'mongodb', and in this application I’m trying to take data of 2 and insert this data into the database, I made a name and a Slug, the problem is that the data is only entered into the database when I use a "default: 'Undefined name' " in the part of registering the name, and the part of Slug (which would be the second ) enters the bank without any problem even without the command 'default' when setting the characteristics, and when I take the 'default' of the name, it shows me the following error in cmd:
Error saving Category: Validationerror: name: Path name
is required.
I appreciate you helping me!
Below is the code:
app js.:
// Constante que recebe o express
const express = require('express');
// Constante que recebe o handlebars
const handlebars = require('express-handlebars');
// Constante que recebe o bodyparses
const bodyParser = require('body-parser');
// Constante que recebe o mongoose
const mongoose = require('mongoose');
// Constante que recebe a função do express
const app = express();
// Constante para chamar rotas de um arquivo externo (usar nome do arquivo no nome da constante)
const admin = require('./routes/admin.js');
// Constante para receber modulo de arquivos estaticos e trabalhar com diretorios
const path = require('path');
// Configurações
// Configuração do BodyParser
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// Configuração do HandleBars
app.engine('handlebars', handlebars({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
// Configuração do Mongoose
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/blogapp', {useNewUrlParser: true}).then(() => {
console.log('Connected to MongoDB');
}).catch((err) => {
console.log('Error to connect: ' + err);
});
// Configuração do caminho (Path) na pasta public
app.use(express.static(path.join(__dirname, 'public')));
// Rotas
// Comando para chamar um grupo de rotas em um arquivo especifico
app.get('/', (req, res) => {
res.send('Index Route!');
});
app.get('/posts', (req, res) => {
res.send('Post Lists!');
})
app.use('/admin', admin);
// Outros
// Constante da porta localhost
const PORT = 8081;
// Função para abrir o servidor na porta selecionada
app.listen(PORT, () => {
console.log('Server running!');
})
Category.js:
// Constante que recebe o mongoose
const mongoose = require('mongoose');
// Constante para ser chamada na hora de criar novos schemas/tables
const Schema = mongoose.Schema;
// Constante para criar um novo schema
const Category = new Schema({
// Atributo do schema
name: {
// Tipo do schema
type: String,
// Definir se o schema é obrigatorio ou não
required: true,
// Definir um valor/texto padrão caso o campo não seja preenchido
default: 'Undefined name'
},
slug: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now()
}
});
// Comando para sincronizar os comandos do mongo com o mongoose
mongoose.model('categories', Category);
admin js.:
//Carregamento de modulos
// Constante que recebe o express
const express = require('express');
// Constante para cirar rota em arquivo externo
const router = express.Router();
// Constante que recebe o mongoose
const mongoose = require('mongoose');
// Comando para chamar o path 'models'
require('../models/Category');
// Constante para importar o arquivo Category.js com os comandos do mongo da pasta 'models'
const Category = mongoose.model('categories');
// Rota principal para o painel administrativo
router.get('/', (req, res) => {
res.render('admin/index')
});
// Rota para listar posts
router.get('/posts', (req, res) => {
res.send('Post page!');
});
// Rota para cadastrar categorias
router.get('/categories', (req, res) => {
res.render('admin/categories');
});
// Rota onde são adicionadas as categorias
router.get('/categories/add', (req, res) => {
res.render('admin/addcategories');
});
// Rota onde as categorias adicionadas aparecem
router.post('/categories/new', (req, res) => {
const newCategory = {
nome: req.body.name,
slug: req.body.slug
};
new Category(newCategory).save().then(() => {
console.log('Category successfully saved');
}).catch((err) => {
console.log('Error saving category: ' + err);
})
})
// Exportação final para sincronizar as rotas (esse comando sempre devera ficar no final do codigo!)
module.exports = router
addcategories.handlebars:
New Category:
Name: Slug:Create cateogry
Put the form where you enter the values, because there is no need to use the default.
– LeAndrade
<H3>New Category: </H3> <div class="card"> <div class="card-body"> <form action="/admin/Categories/new" method="POST"> <label for="name"name">Name: </label> <input type="text" id="name" name" placeholder="Category name" class="form-control"> <label for="Slug">Slug: </label> <input type="text" id="Slug" name="Slug" placeholder="Slug of Category" class="form-control"> <br> <button type="Submit" class="btn btn-Success">Create cateogry</button> </form> </div> </div>
– user143767