編輯 -沒有代碼示例我不確定我的示例是否比您需要的更多或更少。
如果您立即在表單的POST請求處理程序中呈現表單模板,那麼您可能不需要涉及req.session
。只需保存適當的當地人並渲染你的模板。
如果您必須重定向或以其他方式需要跨多個請求提供值,則可以將它們保存在req.session
中,如下所示。
無論哪種方式確保你的Jade模板處理所有情況;在我的示例中,我測試if(locals.savedValues)
以決定是否將默認值或保存的值寫入表單。
最後,如果錯誤不是玉關係,請粘貼該錯誤。
使用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');
};
});
});
在你的玉模板,處理這兩種情況:
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')
謝謝!我不習慣與會話一起工作。我是否正確地認爲:'app.use(express.cookieParser());'和這個'app.use(express.session();'是我需要能夠將值存儲在req.session中的所有東西? –
一個簡短的問題,你可以將reales.value中的值保存到res.locals中,因爲req.session在那裏不可用,所以你可以這樣做,因爲這裏的值不可用? 將變量傳遞給?鑑於這樣這是錯的 'res.render( '形式',{ savedValues:req.session.savedValues ||空, savedErr:req.session.savedErr ||空, ... }? );' –
如果你確實不需要會話,你當然可以重新呈現表單中的表單 – Plato