Javascript 通过Express/Node.js中的重定向将错误消息传递给模板
在我的Node.js应用程序中,我有一个函数(通过Express路由),它向用户呈现一个表单:Javascript 通过Express/Node.js中的重定向将错误消息传递给模板,javascript,redirect,node.js,express,Javascript,Redirect,Node.js,Express,在我的Node.js应用程序中,我有一个函数(通过Express路由),它向用户呈现一个表单: app.get('/register', function (req, res) { res.render('form'); }); 我有另一个函数,路由到相同的URL,但它处理POST请求,接收上一个表单提交的数据。如果表单未验证,它将用户重定向回表单;否则,它将执行应该执行的操作: app.post('/register', function (req, res) { if (valid
app.get('/register', function (req, res) {
res.render('form');
});
我有另一个函数,路由到相同的URL,但它处理POST请求,接收上一个表单提交的数据。如果表单未验证,它将用户重定向回表单;否则,它将执行应该执行的操作:
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'});
if (validate(req.registerForm)) return res.redirect('/register?msg=invalid');
是不可接受的,因为我想遵循POST-REDIRECT-GET模式。我可以做类似的事情
if (validate(req.registerForm)) return res.render('form', {msg:'invalid'});
if (validate(req.registerForm)) return res.redirect('/register?msg=invalid');
但它会在我的代码中硬编码一个URL,我宁愿避免它。还有其他方法吗?您需要使用,而且它内置于express中
您将添加这样的消息:req.flash(“错误”,“无效表单…”)代码>
您需要一个动态处理程序来将消息添加到呈现的模板中,或者您可以查看TJ为express制作的消息。()您只需将其重定向为res.redirect('..?error=1')
那个?标记告诉浏览器它是一组可选参数,并且。。只是一个路径名相对调用(就像在终端上调用cd..向后移动一个目录)
您的浏览器将直接指向相应的页面,并在末尾添加该标记:http://.....?error=1
然后,您只需执行以下操作,即可将错误拉到相应页面上:
if(请求参数(“错误”==1)){
//你认为错误匹配的东西有问题吗
};代码>
您可以硬编码几个不同的错误值,并让它根据发生的错误做出相应的响应谢谢您的选择,但是为什么或什么时候它会比使用flash通知更好呢,没有注意到你自己在问题的底部提出了这个建议——不要认为有任何明显的好处;实现起来更简单一些,错误也更容易看到/跟踪,因为它们位于URL上,但它们应该完成同样的任务。如果你的{do something}比仅仅显示一些东西要复杂一些,那么用这种方式处理它可能有点不安全,因为用户可以通过自己在URL上键入错误消息来利用它——但是,在node 4.0中,或者在Mustach这样的模板中,更直截了当的Flash不起作用。