2015-04-12 50 views
1

我是NodeJS的新手。我有一個問題,在我看來,我無法顯示Flash信息。 這裏是我的控制器,無法在ejs模板中顯示flash消息

index : function(req, res){ 
    res.locals.flash = _.clone(req.session.flash); 
    res.locals.layout = false; 
    res.view('login'); 
}, 
login : function(req, res){ 

     .... 

     if(!admin){ 
      req.session.flash = { 
       err : 'User is not found.' // My flash message 
      } 
      res.locals.layout = false; 
      res.redirect('login'); 
      return; 
     } 

     ..... 
} 

這是我的看法,

<% if(flash && flash.err) { %> 
    <div class="alert alert-danger"> 
    <% JSON.stringify(flash.err) %> 
    </div> 
    <% } %> 

當用戶登錄是假的,它僅顯示一個空的警告框。 而我有第二個問題。當我刷新頁面時,警告框不會消失。

有人可以幫助我。 非常感謝。

回答

4

警告框不斷出現,因爲req.session.flash對象會持續進行會話,因此您需要在使用該對象後將其清零,或者您只需簡單地使用req.flash()即可。所以改變你的index方法是這樣的:

index: function(req, res) { 
    // req.flash() returns the contents of req.session.flash and flushes it 
    // so it doesn't appear on next page load. No need to clone. 
    res.locals.flash = req.flash(); 
    res.locals.layout = false; 
    res.view('login'); 
}, 

現在,到第二個問題。錯誤消息未顯示,因爲您沒有使用正確的EJS語法將轉義值輸出到視圖中。您只需將代碼更改爲:

<% if(flash && flash.err) { %> 
    <div class="alert alert-danger"> 
     // Change <% to <%= 
     <%= flash.err %> 
    </div> 
<% } %> 

不需要JSON.stringify,除非您喜歡引號。 請注意,我將<%更改爲<%=,這在EJS中表示「轉義並輸出」。它不是模板HTML或類似的東西,所以無論如何可以逃避它。