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;

Заранее спасибо!!

0 ответов

Другие вопросы по тегам