通过Express / Node.js中的redirect将错误消息传递给模板

在我的Node.js应用程序中,我有一个函数(由Express路由)向用户呈现一个表单:

app.get('/register', function (req, res) { res.render('form'); }); 

我有另一个function,路由到相同的URL,但处理POST请求,接收由前一个表单提交的数据。 如果表单不确认,则将用户redirect回表单; 否则,它应该做什么:

 app.post('/register', function (req, res) { if (validate(req.registerForm)) return res.redirect('back'); persistStuff(req.registerForm, function (err, data) { // Do error verification etc. res.redirect('back') }); }); 

我想要做的就是发送一个错误消息来提交,在行中:

 if (validate(req.registerForm)) return res.redirect('back'); 

写一些像

 if (validate(req.registerForm)) return res.render('form', {msg:'invalid'}); 

是不可接受的,因为我想遵循POST-REDIRECT-GET模式。 我可以做类似的事情

 if (validate(req.registerForm)) return res.redirect('/register?msg=invalid'); 

但它会硬编码我的代码中的url,我宁愿避免它。 还有另一种方法吗?

您需要使用Flash通知 ,并将其内置到Express中。

你会像这样添加一条消息: req.flash("error", "Invalid form...");

您需要一个dynamic处理程序来将消息添加到您的渲染模板中,或者您可以查看TJ用于expression的内容。 ( 快递讯息 )

你可以简单地把它redirect为res.redirect('..?error=1')

这个? 标签告诉浏览器它是一组可选参数,而..只是一个path名的相对回忆(就像在terminal上回叫一个目录的cd ..一样),而你的浏览器将直接指向相应的页面在最后: http://.....?error=1

那么你可以简单地通过执行一个适当的页面上的错误:

if (req.param("error" == 1)) { // do stuff bassed off that error match };

您可以在几个不同的错误值中进行硬编码,并根据发生的错误进行适当的响应