我使用快速验证器验证我的表单...如果我有错误,阻止表单提交并返回登录页面的最佳方法是什么。这就是我所拥有的,只是寻找处理这个问题的最佳方法(不确定return语句)。
//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对象中获取密码,而不是用户名...所以我需要req.param.username,但是当我通过{q:req.param}并使用<%= inspect(q)%>它是空的。
更新: req.body为我提供了预先填充表单的原始帖子参数。所以你需要错误的堆栈和req.body堆栈以获得良好的体验。
答案 0 :(得分: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()
}
答案 1 :(得分: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 %>
:)