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

bra*_*zzi 12 javascript redirect node.js express

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

app.get('/register', function (req, res) {
  res.render('form');
});
Run Code Online (Sandbox Code Playgroud)

我有另一个功能,路由到相同的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')
  });
});
Run Code Online (Sandbox Code Playgroud)

我想要做的是发送一条错误消息,在行中:

if (validate(req.registerForm)) return res.redirect('back');
Run Code Online (Sandbox Code Playgroud)

写点东西

if (validate(req.registerForm)) return res.render('form', {msg:'invalid'});
Run Code Online (Sandbox Code Playgroud)

是不可接受的,因为我想遵循POST-REDIRECT-GET模式.我可以做点什么

if (validate(req.registerForm)) return res.redirect('/register?msg=invalid');
Run Code Online (Sandbox Code Playgroud)

但它会在我的代码中对URL进行硬编码,我宁愿避免使用它.还有另一种方法吗?

Dom*_*nes 8

您需要使用Flash通知,它内置于express中.

您将添加如下消息: req.flash("error", "Invalid form...");

您需要一个动态处理程序来将消息添加到渲染模板,或者您可以查看TJ为快速制作的消息.(快递信息)

  • flash 不适用于 Node 4.0 或 Mustache 等模板。 (2认同)