1

使用重定向时我无法显示我的 Flash 消息(尽管使用渲染时一切正常)

如果我使用此代码呈现视图,则消息显示正常

req.flash('success_msg', 'Successfully Registered');
res.locals.message = req.flash();
res.render('home');

但是如果我想重定向(在这种情况下我会这样做),则不会显示该消息

req.flash('success_msg', 'Successfully Registered');
res.locals.message = req.flash();
res.redirect('/');

index.js

// Global Vars
app.use(function(req, res, next) {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
});

// Use Routes
app.use('/', routes);
app.use('/', users);

有关如何处理此问题的任何想法,如果我没有提供足够的信息,请让我知道要在此处添加什么

我注意到的是,我可以在重定向之前注销消息

req.flash('success_msg', 'Successfully Registered');
var message = res.locals.message = req.flash();
console.log(message); // { success_msg: [ 'Successfully Registered' ] }
res.redirect('/');

但它从未在我看来

<% if (locals.message) { %>
  <div class="alert alert-success alert-dismissible fade show text-center" role="alert">
    <strong><%= message.success_msg %></strong>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
<% } %>

谢谢

4

1 回答 1

3

我很确定问题出在全局变量的函数中。

这在这里完美无缺:

...
req.flash('msg', 'some msg');
res.redirect('/page');

对于 .get()

app.get('/page', (req, res) => {
    res.render('page', { flash: req.flash('msg') });
});

请注意,每次获取 Flash 内容时,都会将其删除:

req.flash('msg', 'some msg');
console.log(req.flash('msg')); // prints 'some msg'
console.log(req.flash('msg')); // prints []

另外,我建议您查看Brian MacArthur 的这个非常好的要点

于 2018-07-12T20:00:21.660 回答