我有一个HTML表单,我想在我的网站上验证它是 NOT 一个登录表单。
这是一个简单的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个字符,如果该电子邮件是有效的电子邮件地址......就是这样。我还有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
吗?有没有更好的办法?
继承我的index.js文件中的get / post请求:
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();
);
我在我的broswer Unknown authentication strategy “local”
说错了。您可以通过注释掉的行看到我试图使用express-validator
方法来验证表单。但是,如果没有使用express-session
flash
,我似乎无法使用passport
,如果没有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 StackOverflow 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;
,所有这些都无效。我不需要验证登录,所以我想知道我是否需要这个或者是否有更好的方法来解决它。
这是我的app.js文件 AS IS :
{{1}}
提前致谢!!