forms - Express.js 表单处理和错误检查——正确的方法

标签 forms node.js express

我在模板中有一个表单,我根据 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,有两种选择:

  1. 将用户重定向到/register,使用req.flash将错误传递给下一个请求
  2. 重新渲染模板并将错误直接传递给模板

在第一个选项中,我冒着丢失表单数据的风险,因为用户离开了 POST。我也可以使用 req.flash 使用他们填写的数据抢占表单,但这会在页面刷新时消失。

对于第二个选项,我在重复自己——尤其是当我向模板发送大量变量时,所有这些都必须重复。我还需要通过模板传递所有表单数据并使用这些值填写表单。

处理这样的表格的正确程序是什么?

最佳答案

使用选项 1。这称为 POST/Redirect/GET pattern并且无处不在。

如果您害怕丢失数据,请使用 session 。这就是他们的目的。在 session 期间保持状态。

不要忘记 HTTP 是无状态的。

关于forms - Express.js 表单处理和错误检查——正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963166/

相关文章:

php - 将表单数据发布到另一个页面,然后再次发布

javascript - 如何在 Chrome 浏览器控制台中提交包含输入值的表单?

forms - Symfony2 一个模板中的多个表单

javascript - Bootstrap 表单 - 在输入组失败后放置输入

node.js - 使用 mocha.js 在 node.js 中测试外部 api 调用

angularjs - 如何让用户使用 Express 和 oAuth2 在 Angular 中的多个设备上登录?

node.js - 服务器 2012,SSL(让我们加密),nodejs 应用程序,重定向端口

node.js - Socket.io 如何检查用户是否正在输入并将其广播给其他用户

javascript - 如何使用 Cloud Functions 的自定义域作为 POST 请求

node.js - 使用 Express 在动态路由上提供静态文件