Express -Валидатор формы выдачи - PullRequest
0 голосов
/ 01 мая 2020

У меня проблемы с направлением пользователя после отправки формы.

Я использую express, mon goose, express -validator, express -message.

Когда пользователь нажимает кнопку «Отправить» с пустым вводом заголовка и пустым вводом содержимого, он возвращает пользователя на страницу ввода формы с сообщением об ошибке. который работает нормально.

Однако, когда пользователь заполняет заголовок и содержимое, я собираюсь привести пользователя к localhost/admin/pages, однако он возвращает пользователя на страницу ввода формы без сообщения об ошибке.

Я предполагаю, что в add_page. js, в router.post("/add-page"..., после проверки валидации, когда возникает ошибка, она не выполняет оператор if. это работает, как я уже говорил выше. Однако, вероятно, это даже не относится к выражению else, поскольку я не вижу console.log('ELSE STATEMENT').

После нескольких часов исследований я вижу, как некоторые люди кодируют, например, возвращает promise из Schema.findOne.

Кто-нибудь, пожалуйста, дайте мне решение этой проблемы?

add_page.e js

<%- include('../partials/adminheader')  %>  
<h2 class="page-title">Add a page</h2>
<a href="/admin/pages" class="btn btn-primary">Back to all pages</a>
<br><br>

<form action="/admin/pages/add-page" method="post">
    <div class="form-group">
        <label for="">Title</label>
        <input type="text" class="form-control" name="title" value="<%= title %>" placeholder="Title"> 
    </div>

    <div class="form-group">
        <label for="">Slug</label>
        <input type="text" class="form-control" name="slug" value="<%= slug %>" placeholder="Slug"> 
    </div>

    <div class="form-group">
        <label for="">Content</label>
        <textarea type="content" class="form-control" name="content" value="<%= content %>" cols="30" rows="10" placeholder="Content"></textarea>
    </div>

    <button class="btn btn-success">Submit</button>
</form>
<%- include('../partials/adminfooter')  %>  

приложение. js

const express = require("express");
const path = require("path");
const mongoose = require("mongoose");
const config = require("./config/database");
const bodyParser = require('body-parser');
const session = require('express-session')
// const { check, validationResult } = require('express-validator');

mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);

const app = express();

// DB CONNECTION
mongoose.connect(config.database);
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error: "));
db.once("open", () => {
  console.log("connected to Mongo DB");
});

// VIEW SET UP
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.use(express.static(path.join(__dirname, "public")));

// GLOBAL ERRORS VARIABLES
app.locals.errors = null;

// BODY-PARSER
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// SESSION
app.use(session({
  secret: 'keyword cat',
  resave: false,
  saveUninitialized: true,
  cookie: {
    secure: true
  }
}));

// VALIDATOR
// Place in the routes/admin_pages.js

// MESSAGES
app.use(require('connect-flash')());
app.use((req, res, next) => {
  res.locals.messages = require('express-messages')(req, res);
  next();
})

// SET ROUTES
var pages = require('./routes/pages');
var adminPages = require('./routes/admin_pages');

app.use('/admin/pages', adminPages);
app.use('/', pages);


// LISTENING PORT
var PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
  console.log("Server started on Port", PORT);
});

admin_pages. js

const express = require('express');
const router = express.Router();
const { check, validationResult } = require('express-validator');

router.get("/", (req, res) => {
    res.send('admin area');
});

router.get("/add-page", (req, res) => {
    let title = "";
    let slug = "";
    let content = "";

    // render its view
    res.render('admin/add_page', {
        title: title, // sent to add_page.ejs form input
        slug: slug,
        content: content
    });
});


router.post("/add-page", [
    check('title', 'Title must have a value').notEmpty(),
    check('content', 'Content must have a value').notEmpty(),

    ], (req, res) => {

        let title = req.body.title;
        let slug = req.body.slug.replace(/\s+/g, '-').toLowerCase();
        if (slug == "") slug = title.replace(/\s+/g, '-').toLowerCase(); 
        let content = req.body.content  

        let errors = validationResult(req);

        if (errors) {
            // console.log("Input Errors Result: ", errors);
            // console.log("Errors: ", errors.errors[1]["msg"])
            res.render('admin/add_page', {
                errors: errors,
                title: title,
                slug: slug,
                content: content
            });   
        } else {
            console.log("ELSE STATEMENT");
            // check the duplicated slug in the db
            Page.findOne({ slug: slug }, (err, page) => {
                if(page) {
                    req.flash('danger', 'Page slug exists, choose another');
                    req.render('admin/add_page', {
                        title,
                        slug,
                        content
                    });
                } else {
                    let page = new Page({
                        title: title, 
                        slug: slug,
                        content: content,
                        sorting: 0
                    });

                    page.save(err => {
                        if(err) return console.log(err);

                        req.flash('success', 'Page added');
                        res.redirect('admin/pages');
                    });
                }
            });
        }
});

module.exports = router;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...