2012-05-14 91 views
0

的Flash消息從req.flash()我收到對象{ error: ['Invalid username'] }。我將它傳遞給使用動態助手在Jade中編寫的模板。但是,當我在模板做Express.js,Jade:呈現類型爲

for type in flashMessages 
    p #{type} 

我得到的消息(「無效的用戶名」),而不是在可變類型的類型。

你能給我一個建議如何得到這種類型嗎?我想打印這樣的提示信息:

for type in flashMessages 
    each message in flashMessages[type] 
     p.alert-#{type} #{message} 

謝謝

+0

是什麼「型」指的是? –

回答

3

req.flash()旨在要麼給你所有郵件的平面列表,或特定類型的所有郵件的平面列表。無論哪種方式,消息對象本身都不會告訴你類型,因爲假定你已經知道這個類型。但是,由於req.flash()req.session.flash支持,您可以推出自己的功能。

首先,您需要準備好自己的消息列表,以獲取所需的信息,以便將消息傳遞給您的視圖。例如,

var messagesByType = req.session.flash || {}, 
    allMessages = []; 
Object.keys(messagesByType).forEach(function(type) { 
    var messages = messagesByType[type] || []; 
    messages.forEach(function(msg) { 
     allMessages.push({ type: type, text: msg }); 
    }); 
}); 
req.session.flash = {}; 

其次,確保你allMessages提供您的模板中。例如,

res.render('some-view', { messages: allMessages }); 

這應該給你的東西,你可以在視圖裏遍歷這樣的:

for message in messages 
    p(class='alert-#{message.type}') #{message.text} 
+0

謝謝。這比默認行爲更舒服。只是一件事:Jade認爲'alert - #{message.type}'是類alert-',類型本身會將其放入內容中: -/ – A123321

+0

用空格替換' - '。 –

+0

'p(class ='alert - #{message.type}')'工作嗎?不確定插值在其他上下文中是否有效。 – jmar777

1

是什麼您嘗試打印的「類型」的值是指?

flash()的值沒有任何'type'屬性。

如果「類型」你的意思是「錯誤」和「消息」你指的是「無效的用戶名」:

錯誤是一個對象的屬性。要列出他們,你必須使用

var keys = Object.keys(myObject);