У меня проблемы с направлением пользователя после отправки формы.
Я использую 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;