Forms 如何使用express.js和node停止表单提交
我正在用ExpressValidator验证我的表单…如果我有错误,什么是阻止表单提交并返回登录页面的最佳方法。这就是我所拥有的,有效的,只是在寻找处理这个问题的最佳方法(不确定返回语句) 我也不知道如何获得表单模板(ejs)中的原始值 我试图传入req.param,但它是空的 err对象只有那些有错误的字段,所以如果我输入username,但将password留空,我只在err对象中获得password,而不是username…因此我需要req.param.username,但当我传递{q:req.param}并使用它时,它是空的Forms 如何使用express.js和node停止表单提交,forms,validation,node.js,express,ejs,Forms,Validation,Node.js,Express,Ejs,我正在用ExpressValidator验证我的表单…如果我有错误,什么是阻止表单提交并返回登录页面的最佳方法。这就是我所拥有的,有效的,只是在寻找处理这个问题的最佳方法(不确定返回语句) 我也不知道如何获得表单模板(ejs)中的原始值 我试图传入req.param,但它是空的 err对象只有那些有错误的字段,所以如果我输入username,但将password留空,我只在err对象中获得password,而不是username…因此我需要req.param.username,但当我传递{q:r
更新:req.body为我提供了原始的post参数以预填充表单。因此,您需要err stack和req.body stack来获得良好的体验。我建议您使用类似于设置flash通知的方法,并将请求重定向回视图 因此,您可以执行以下操作:
if ( res.locals.errors )
{
res.flash('error','bad username/password');
req.session.formData = req.body;
res.redirect('back');
}
然后在视图中,您只需检查是否存在
flash.error
,如果存在,则输出消息,然后:
:)我建议您使用类似设置flash通知并将请求重定向回视图
因此,您可以执行以下操作:
if ( res.locals.errors )
{
res.flash('error','bad username/password');
req.session.formData = req.body;
res.redirect('back');
}
然后在视图中,只需检查是否存在flash.error
,如果存在,则输出消息,然后:
:)这就是我所做的
app.post('/form_process', validateForm, form.handle)
function validateForm(req, res, next) {
req.assert('username', 'Invalid Username').notEmpty().isAlpha();
req.assert('password', 'Invalid Password').notEmpty().isAlpha();
var errors = req.validationErrors();
if (errors) {
//res.send(errors,500);
var original_values = {
username: req.param('username'),
password: req.param('password')
}
res.render('login', { errorMsg: errors, original: original_values, title: "Login error" })
return;
}
else next()
}
我就是这么做的
app.post('/form_process', validateForm, form.handle)
function validateForm(req, res, next) {
req.assert('username', 'Invalid Username').notEmpty().isAlpha();
req.assert('password', 'Invalid Password').notEmpty().isAlpha();
var errors = req.validationErrors();
if (errors) {
//res.send(errors,500);
var original_values = {
username: req.param('username'),
password: req.param('password')
}
res.render('login', { errorMsg: errors, original: original_values, title: "Login error" })
return;
}
else next()
}
当遇到错误时,仍然需要原始请求对象来预填充表单。您也可以这样做
req.session.formData=req.body
在res.redirect
之前,仍然需要原始请求对象,但在遇到错误时,需要预填充表单。您也可以这样做req.session.formData=req.body
在res.redirect
确定之前,很抱歉,我没有读到您想要传递原始值。更新了答案此答案为选定答案。我没有拒绝。好的,很抱歉,我没有读到你想要传递原始值。更新了答案此答案为选定答案。我没有拒绝。