我在模板中有一个表单,我根据GET
请求呈现:
app.get('/register', function (req, res) {
res.render('register', {
title: 'Register'
, twitterDetails: req.session.twitterDetails
}
);
});
POST
然后我在请求中处理表单:
app.post('/register', function (req, res, next) {
// Generic validation
req.assert('name', 'Name is empty').notEmpty();
req.assert('username', 'Username is empty').notEmpty();
// Email validation
req.assert('email', 'Email is invalid.').isEmail();
req.assert('email', 'Email field is empty').notEmpty();
// Password validation
req.assert('password', 'Password too short. Must be 6 characters or more.').len(6);
req.assert('password', 'Passwords do not match.').is(req.body.confirmPassword);
req.assert('password', 'Password field is empty').notEmpty();
req.assert('confirmPassword', 'Confirm password field is empty').notEmpty();
var errors = req.validationErrors(true);
if (errors) {
console.log(errors);
// What do to if there are errors?
}
// If there are no errors, continue handling the form…
});
在这个表单处理程序中,我正在检查express-validator
模块的错误。这很好,但我的问题是如果出现错误该怎么办。AFAIK,有两种选择:
- 将用户重定向到
/register
,req.flash
用于将错误传递给下一个请求 - 重新渲染模板并将错误直接传递给模板
使用第一个选项,我会冒着让用户远离POST
. 我也可以使用他们填写的数据抢占表单req.flash
,但是刷新页面时这会消失。
对于第二个选项,我是在重复自己——特别是如果我向模板发送大量变量,这些变量都必须重复。我还需要通过模板传递所有表单数据并用这些值填写表单。
处理这样的表格的正确程序是什么?