我在模板中有一个表单,我根据 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
使用他们填写的数据抢占表单,但这会在页面刷新时消失。
对于第二个选项,我在重复自己——尤其是当我向模板发送大量变量时,所有这些都必须重复。我还需要通过模板传递所有表单数据并使用这些值填写表单。
处理这样的表格的正确程序是什么?
最佳答案
使用选项 1。这称为 POST/Redirect/GET pattern并且无处不在。
如果您害怕丢失数据,请使用 session 。这就是他们的目的。在 session 期间保持状态。
不要忘记 HTTP 是无状态的。
关于forms - Express.js 表单处理和错误检查——正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963166/