2011-07-01 33 views
4
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('/'); 
}); 

用戶首先去「/去」。之後,他將被重定向到「/」,我想要一個flash消息顯示爲一個JavaScript警報。在Express.js中,如何讓我的模板顯示Flash消息?

我該怎麼做?

回答

10

添加它作爲一個地方您的來電來呈現:

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

且模板中使用它:

#flash 
    p= info 
+3

好,吸。需要爲每個模板定義信息'render'調用:/ –

+2

您可以使用dynamicHelpers將數據直接傳遞到每個請求的視圖 – jackdbernier

6

您可以使用動態表達助手讓您的生活更輕鬆。

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> 
+1

使用動態助手是個好主意,但在您的示例中,您最終會在您的html中邏輯。您應該'返回req.flash'並處理視圖中數據的圖形表示 – jackdbernier

1

也有類似的問題,解決方案似乎是:

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

使用回似乎保持閃光燈的消息,其中作爲重定向到相同的路線失去它。

4
app.dynamicHelpers({flash: function(req, res){return req.flash();}}); 

現在您可以訪問您所查看的Flash對象。您的邏輯中沒有HTML,也不需要在每條路線中添加所有參數。

0

如果您使用的是Express 3,則內置的閃存功能已被刪除。要獲得相同的功能,你將要安裝的connect-flash模塊,然後從這個吉斯特添加代碼剛過你初始化會話之前app.use(app.router);https://gist.github.com/3070950

2

對於我來說,我使用下面的代碼顯示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 
相關問題