Node.js + экспресс-проверка формы с помощью Flash + Express-Validator
У меня есть HTML-форма, которую я хочу проверить на своем сайте, и это НЕ форма для входа.
Это простая форма HTML:
<form method= "post">
<div id= bookingFields>
<label>Name</label> <input class = "userInfo" id="name" name="name" type="text"/>
<label>Email</label> <input class = "userInfo" id="email" name="email" type="text"/>
<label>Guests</label> <input class = "userInfo" id="guestCount" name="guestCount" type="number" min="1" max="8"/>
<label>Date</label> <input class = "userInfo" id="dateRange" name="dateRange" type="text"/>
</div>
<input type="submit" value="Request to Book">
<div>
</form>
Этот сайт предназначен для бронирования загородного дома, поэтому мне нужно проверить только те поля, если имя превышает 2 символа, и если адрес электронной почты является действительным адресом электронной почты... вот и все. У меня также есть https://fullcalendar.io/ с календарем доступных дат, который я, возможно, хотел бы интегрировать в поле выбора даты, но сейчас я не буду беспокоиться об этом.
Вот что я пытаюсь сделать:
Я хотел бы, чтобы пользователь мог заполнить эту форму и проверить ее перед публикацией на сервере MongoDB с ошибками и отзывами для исправления пользователем. Я использую Node.js + Express для своего бэкэнда и пытаюсь использовать flash
чтобы эти сообщения отображались пользователю. Я рискнул довольно далеко вниз по этой кроличьей норе flash
, express-validator
, express-session
, passport
, express-flash messages
и т. д. и все они, кажется, требуют друг друга для работы. Но кажется, что цель всего этого промежуточного программного обеспечения состоит в том, чтобы проверять и обрабатывать имя входа, а также держать пользователя вошедшим со страницы на страницу и запрашивать запрос.
Мне даже нужно это для того, что я пытаюсь сделать?
Я хотел бы использовать express-validator
потому что методы дезинфекции, обрезки и проверки форм кажутся простыми и понятными. Но мне нужно express-session
делать то, что нужно passport
использовать flash
отправлять сообщения пользователю, и это кажется излишним для того, что я пытаюсь достичь. Я действительно только хочу использовать trim()
,isLength()
, а также sanitizeBody()
методы на express-validator
и использовать flash
отображать сообщения пользователю. Это все.
У меня нет логина на моем сайте, и все формы, которые я пытаюсь проверить, существуют только на одной странице. Могу ли я даже использовать flash
а также express-validator
за это? Есть ли способ лучше?
Вот запросы get/post в моем файле index.js:
router.get('/availibility', (req, res) => {
res.render('availibility');
});
router.post('/availibility', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/availibility'
})
//req.check('name', 'Name must be longer than 2 letters').isLength({min:2});
//req.check('email','Must be a valid email').isEmail();
);
Я получаю ошибки в моей сказке Unknown authentication strategy “local”
, По закомментированным строкам видно, что я пытался использовать express-validator
методы для проверки форм. Но это, кажется, не работает без express-session
, который я хочу использовать flash
с, и все это не работает без passport
, Мне не нужно проверять логин, поэтому мне интересно, нужно ли мне это вообще или есть ли лучший способ сделать это?
Вот мой файл app.js КАК ЕСТЬ:
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const routes = require('./routes/index');
const flash = require('express-flash-messages');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const errorHandlers = require('./handlers/errorHandlers');
const expressValidator = require('express-validator');
const session = require('express-session');
const app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(cookieParser());
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: false,
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy({
usernameField : 'username',
passwordField : 'password'
}, (req, username, password, done) => {
// This was copy/pasted from another Stackru post that didn't answer my question
...
..
}));
}
app.use(flash());
app.use((req, res, next) => {
res.locals.flashes = req.flash();
res.locals.currentPath = req.path;
next();
});
app.use('/', routes);
module.exports = app;
Заранее спасибо!!