0

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

//routes/index.js
exports.login.post = function(req, res){
  req.assert('username', 'Please enter username').notEmpty();
  req.assert('password', 'Please enter password').notEmpty();
  res.locals.errors = req.validationErrors(true);

  if ( res.locals.errors ) {
    console.log(res.locals.errors);
    var d = { title: 'Login' };
    res.render('login', { d: d });
    return;
  }

 //do login here if no errors
};

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

我尝试将 req.param 传入,但它是空的。

err 对象只有那些有错误的字段,所以如果我输入用户名,但将密码留空,我只会在 err 对象中获得密码,而不是用户名......所以我需要 req.param.username,但是当我通过 { q: req.param} 并使用 <%= inspect(q) %> 它是空的。

更新: req.body 给了我原始的帖子参数来预填充表单。所以你需要 err stack 和 req.body stack 才能有好的体验。

4

2 回答 2

2

这就是我所做的

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()
}
于 2012-09-22T09:59:47.893 回答
1

我建议做的是使用类似flashify的东西来设置 flash 通知并将请求重定向回视图。

因此,您可以执行以下操作:

if ( res.locals.errors ) 
{
  res.flash('error','bad username/password');
  req.session.formData = req.body;
  res.redirect('back');
}

然后在视图中,您只需检查是否flash.error存在,如果存在则输出消息,然后:<%= flash.error %>:)

于 2012-09-22T06:07:39.377 回答