Problem with Success message after registration of 2 inputs in the bank!

Asked

Viewed 260 times

0

Hello, I have a problem in my code, after registering 2 inputs should appear a message of success in uam green div, but only appears the green div and the message no, already revised the code several times and not yet found the error (probably some silly mistake but unfortunately I can not find), thanks for the help!!

Below is the code:

App.js:

// Carregamento de modulos
    // 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');
    // Constante pare receber o modulo session
        const session = require('express-session');
    // Constante para  receber o modulo flash
        const flash = require('connect-flash');

// Configurações
    // Configuração das sessões
        app.use(session({
            // Chave para gerar uma sessão 
            secret: 'root',
            resave: true,
            saveUninitialized: true
        }));
    // Configuração da sessão flash
        app.use(flash());
    // Middleware
        app.use((req, res, next) => {
            // Comando 'locals' para criar variaveis globais
            res.locals.success_msg = req.flash('success_msg');
            res.locals.error_msg = req.flash('error_msg');
            // Comando 'next();' para permitir que as rotas avancem apos passarem no mdidleware
            next();
        });
    // 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!');
        })

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) => {
            // Validação do formulario (manual)
            var error = []
            // Verificação do campo nome: vazio, indefinido ou nulo
            if (!req.body.name || typeof req.body.name == undefined || req.body.name == null){
                // Comando push para colocar um novo dado dentro do array
                error.push({text: 'Invalid name'});
            }
            // Verificação do campo slug: vazio, indefinido ou nulo
            if (!req.body.slug || typeof req.body.slug == undefined || req.body.slug == null){
                error.push({text: 'Invalid slug'});
            }

            // Verificação da quantidade de caracteres inseridos do nome
            if (req.body.name.length < 2){
                error.push({text: "Name of category too short"});
            }
            // Verificação de erros de acordo com o array, se error for maior que 0, houveram erros
            if (error.length > 0){
                res.render('admin/addcategories', {error: error})
            // Se o array for < ou = 0, os dados são inseridos no banco
            } else {
                const newCategory = {
                    // Comando para pegar o input do <form> com o 'name' = name
                    name: req.body.name,
                    // Comando para pegar o input do <form> com o 'name = slug
                    slug: req.body.slug
                };
                new Category(newCategory).save().then(() => {
                    // Comando flash para chamar a variavel global 'success_msg' caso tenha sucesso ao cadastrar o formulario
                    req.flash("success_msg", "Successfully created category!");
                    // Redirecionamento para a pagina 'categories'
                    res.redirect('/admin/categories')
                }).catch((err) => {
                    // Comando flash para chamar a variavel global 'error_msg' caso ocorra um erro ao cadastrar o formulario
                    req.flash("error_msg", "There was an error registering the category, please try again!");
                    // Redirecionamento para pagina 'admin' caso aconteça um erro
                    res.redirect('/admin');
                })
            }
        })

// Exportação final para sincronizar as rotas (esse comando sempre devera ficar no final do codigo!)
    module.exports = router

main handlebars.:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <!-- Comando para linkar o html com o CSS do Bootstrap -->
    <link rel="stylesheet" href="/css/bootstrap.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Blog NodeJS</title>
</head>
<body>
    <!-- Comando para importar um arquivo .handlebars externo -->
    {{>_navbar}}
    <div class="container mt-4">
        <!-- Comando para chamar as variaveis globais de mensagem de erro -->
        {{>_msg}}
        <!-- Comando para chamar o body direto do framework handlebars  -->
        {{{body}}}
    </div>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="/js/bootrstrap.js"></script>
</html>

addcategories.handlebars:

{{#each error}}
    <div class="alert alert-danger">{{text}}</div>
{{else}}

{{/each}}
<h3>New category: </h3>
<div class="card">
    <div class="card-body">
    <form action="/admin/categories/new" method="POST">
    <label for="name">Name: </label>
        <input type="text" id="name" 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>

_msg.handlebars:

{{#if success_msg}}
    <!-- Div para exibir mensagem de sucesso ao cadastrar formulario -->
    <div class="alert alert-success"{{success_msg}}></div>
{{/if}}

{{#if error_msg}}
    <!-- Div para exibir mensagem de erro ao cadastrar formulario -->
    <div class="alert alert-danger">{{error_msg}}</div>
{{/if}}

inserir a descrição da imagem aqui

1 answer

1

The error is in _msg.handlebars:

{{#if success_msg}}
    <!-- Div para exibir mensagem de sucesso ao cadastrar formulario -->
    <div class="alert alert-success"{{success_msg}}></div>
{{/if}}

{{#if error_msg}}
    <!-- Div para exibir mensagem de erro ao cadastrar formulario -->
    <div class="alert alert-danger">{{error_msg}}</div>
{{/if}}

In the {{success_msg}} section, note that the message is being set as an html attribute. Change to:

<div class="alert alert-success">{{success_msg}}</div>

Browser other questions tagged

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