编辑 -没有代码示例我不确定我的示例是否比您需要的更多或更少。
如果您立即在表单的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