Error picking up input from a <form> with Mongoose/nodejs

Asked

Viewed 218 times

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
  • 1

    Put the form where you enter the values, because there is no need to use the default.

  • <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>

1 answer

1


So it’s kind of hard to do a more appropriate analysis, but I think the problem there is that here in this piece of code:

const newCategory = {
    nome: req.body.name,       <= está utilizando o atributo nome
    slug: req.body.slug
};

But in the statement of the attribute in the class Category:

name: {                        <= está utilizando 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'
},
  • 1

    Man, total lack of attention my, I don’t know how to thank you, I was trying to solve this code early, thank you very much!!! D

  • 1

    Normal man, for those who develop this type of error is normal, we are very focused on something that sometimes the mistake is a silly thing, but, it takes a while to find out. Success there!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.