テンプレートにフォームがあり、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、2つのオプションがあります:
- 次のリクエストにエラーを渡すため
/register
に使用して、ユーザーをにリダイレクトしますreq.flash
- テンプレートを再レンダリングし、エラーをテンプレートに直接渡します
最初のオプションでは、ユーザーをから遠ざけることでフォームデータを失うリスクがありますPOST
。使用して入力したデータでフォームをプリエンプトすることもできreq.flash
ますが、ページが更新されるとこれは表示されなくなります。
2番目のオプションでは、自分自身を繰り返しています。特に、テンプレートに多くの変数を送信する場合は、すべてを繰り返す必要があります。また、すべてのフォームデータをテンプレートに通して、それらの値をフォームに入力する必要があります。
このようなフォームを処理するための正しい手順は何ですか?