JadeJS和重写呈现视图中的预写表单值

我使用Node / Express和Jade来构build和App。

我有一个POST路由,消毒和validation表单input,然后将其保存到MongoDB。 如果这个表单input没有被validation,路由将抛出错误,error handling程序将重新呈现相同的页面…

而这里来的问题。 在这个重新渲染,并希望表单值预先编写,并准备由用户纠正…我不想要一个干净的表单,用户必须重新写入所有内容。

我试图将req.body(消毒)数据提交到重新呈现的页面,该页面起作用。 但是如果试图在我的Jade视图中使用这个数据,当这个req.body数据没有被定义的时候,Node会输出错误,就像第一次进入这个页面一样,而且还没有input任何错误的input。

我如何解决这个好方法?

编辑 –没有代码示例我不知道我的例子是多lessless于你的需要。

如果您在表单的POST请求处理程序中立即渲染表单模板,则可能不需要涉及req.session 。 只需保存适当的当地人并呈现您的模板。

如果您必须redirect或以其他方式需要跨多个请求提供值,则可以将其保存在请求中,如下所示。

无论哪种方式确保你的Jade模板处理所有的情况; 在我的例子中,我testingif(locals.savedValues)来决定是否将默认值或保存值写入表单中。

最后,如果错误是不相关玉请粘贴该错误。


使用req.session保存值。 在呈现表单之前,设置一个localsvariables来表示保存的值或为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')