Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Express/Node.js中的重定向将错误消息传递给模板_Javascript_Redirect_Node.js_Express - Fatal编程技术网

Javascript 通过Express/Node.js中的重定向将错误消息传递给模板

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

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

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不起作用。