編集 -コード サンプルがないと、私の例が必要以上かどうかわかりません。
フォームの POST 要求ハンドラー内でフォーム テンプレートをすぐにレンダリングする場合は、おそらく を含める必要はありませんreq.session
。適切なローカルを保存して、テンプレートをレンダリングするだけです。
リダイレクトする必要がある場合、または複数のリクエストで値を使用できるようにする必要がある場合は、req.session
以下に示すように保存できます。
いずれにせよ、Jade テンプレートがすべてのケースを処理することを確認してください。私の例では、if(locals.savedValues)
デフォルトまたは保存された値をフォームに書き込むかどうかをテストして決定します。
最後に、エラーが jade 関連でない場合は、そのエラーを貼り付けてください。
req.session を使用して値を保存します。locals
フォームをレンダリングする前に、保存された値または null を表す変数を設定します。
app.get('/form', function(req, res){
res.locals.savedValues = req.session.savedValues || null;
res.locals.savedErr = req.session.savedErr || null;
res.render('form');
});
app.post('/form', function(req, res){
var values = {
name: req.body.name,
email: req.body.email,
};
validateForm(values, function(err, processed){
if(err){
req.session.savedValues = processed;
req.session.savedErr = err;
// req.session.savedValues = values, if you dont want to propose changes
res.redirect('back');
} else {
delete req.session.savedValues;
delete req.session.savedErr;
res.redirect('/success');
};
});
});
jade テンプレートで、両方のケースを処理します。
if(locals.savedErr)
span.error=locals.savedErr
form(action='form', method='post')
if(locals.savedValues)
input#name(type='text')=locals.savedValues.name
input#email(type='text')=locals.savedValues.email
else
input#name(type='text')
input#email(type='text')