Forms 如何使用express.js和node停止表单提交

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

我正在用ExpressValidator验证我的表单…如果我有错误,什么是阻止表单提交并返回登录页面的最佳方法。这就是我所拥有的,有效的,只是在寻找处理这个问题的最佳方法(不确定返回语句)

我也不知道如何获得表单模板(ejs)中的原始值

我试图传入req.param,但它是空的

err对象只有那些有错误的字段,所以如果我输入username,但将password留空,我只在err对象中获得password,而不是username…因此我需要req.param.username,但当我传递{q:req.param}并使用它时,它是空的


更新: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
确定之前,很抱歉,我没有读到您想要传递原始值。更新了答案此答案为选定答案。我没有拒绝。好的,很抱歉,我没有读到你想要传递原始值。更新了答案此答案为选定答案。我没有拒绝。