2012-09-03 17 views
3

據我所知,req.flash()已從Express 3.x(source)中刪除,建議直接使用req.session(即req.session.messages)。在Express 3.x中重定向後顯示閃存

這不是問題,但我很難弄清楚如何在重定向後在佈局中顯示此信息。我試過類似

app.locals.messages = function() { return req.session.messages }; 

但我們顯然無法訪問req對象。

如何在重定向後顯示req.session.messages的內容?

+0

我可以看一下我的解決方案在幾個小時內,當我回家。我相信我必須訴諸寫一個使用'req.session'設置'app.locals.messages'的中間件。 – rdrey

+0

那太棒了。我沒有經驗編寫中間件,所以看到你的解決方案會很棒。謝謝。 – Feech

+2

我寫了一個名爲flashify的NPM包來解決這個問題。 'https:// npmjs.org/package/flashify' – Menztrual

回答

18

只要做到:

app.use(/* my session middleware */) 
app.use(function(req, res, next) { 
    res.locals.messages = req.session.messages 
    next() 
}) 

,你將永遠在你看來messages。它不必比這更復雜。

如果你願意,你可以添加自己的flash函數。

app.use(function(req, res, next) { 
    var session = req.session; 
    var messages = session.messages || (session.messages = []); 

    req.flash = function(type, message) { 
    messages.push([type, message]) 
    } 

    next() 
}) 

而在你看來只是做message = messages.pop()

+0

謝謝,我還在學習節點,最後想我明白什麼是快遞中間件。 – Feech