繁体   English   中英

在 Express.js 中,如何让我的模板显示 flash 消息?

[英]In Express.js, how do I make my template display the flash messages?

app.get('/',function(req,res){
    res.render('home'); // I want the template to be able to access the flash message..
});

app.get('/go',function(req,res){
    req.flash("info", "You went GO, and got redirected to home!");
    res.redirect('/');
});

用户首先转到“/go”。 之后,他将被重定向到“/”,我希望 flash 消息显示为 javascript 警报。

我怎样才能做到这一点?

将其作为本地添加到您的渲染调用中:

res.render("home", {info: req.flash("info")});

并在您的模板中使用它:

#flash
  p= info

您可以使用 express 动态助手让您的生活更轻松。

app.dynamicHelpers({flashMessages: function(req, res) {
var html = ""
  , flash  = req.flash();
['error', 'info'].forEach(function(type) {
  if(flash[type]) {
    flash[type].forEach(function(message) {
      html += "<div class='alert " + type + "'>" + message + "</div>";
    });
  }
});
return html; }});

并在您的布局中(ejs 示例)

  <body><%- flashMessages %><%- body %></body>
app.dynamicHelpers({flash: function(req, res){return req.flash();}});

现在您可以访问您查看的 flash object。 您的逻辑中没有 HTML 并且无需在每条路线中添加所有参数。

对我来说,我使用以下代码显示 flash 消息:

app.js

app.use(function (req, res, next) {
 req.session.message = req.session.message || { error: [], success: [], info: [] };
 app.locals.message  = req.session.message;
}

在您的user.js路线中:

app.post('/users/new', function (req, res, next) {
    //...
    // do some work
    req.session.message.info.push('Account created successfully');
    res.redirect('/login');
});

然后,在视图中创建一个message.jade ,您可以将其包含到其他视图中:

message.jade

- var i
- if (message.error && message.error.length)
  .alert.alert-warning.alert-dismissable
    button.close(type="button", data-dismiss="alert", aria-hidden="true") &times;
    - for (i = 0; i < message.error.length; i++)
      .center!= message.error[i]
- if (message.info && message.info.length)
  .alert.alert-info.alert-dismissable
    button.close(type="button", data-dismiss="alert", aria-hidden="true") &times;
    - for (i = 0; i < message.info.length; i++)
      .center!= message.info[i]
- message.info = message.error = [] // REMEMBER to reset messages to an empty array

有类似的问题,解决方案似乎是:

req.flash('error', 'validation failed');
res.redirect('back');

使用 back 似乎可以维护 flash 消息,因为重定向到同一路由会丢失它。

如果您使用的是 Express 3,则内置的 flash 功能已被删除。 要获得相同的功能,您需要安装connect-flash模块,然后在初始化会话之后和app.use(app.router);之前添加此 Gist 中的代码。 : https://gist.github.com/3070950

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM