Express.js,Jade:使用类型呈现flash消息

时间:2012-05-14 17:30:52

标签: express pug

req.flash()我得到了对象{ error: ['Invalid username'] }。我将它传递给使用动态帮助器在Jade中编写的模板。但是当我做的时候

for type in flashMessages
    p #{type}

在模板中我收到了消息('用户名无效'),而不是变量 type 中的类型。

你能给我一个如何获得这种类型的建议吗?我想打印这样的flash消息:

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

谢谢

2 个答案:

答案 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}

答案 1 :(得分:1)

您尝试打印的“类型”值是指什么?

flash()值没有任何'type'属性。

如果通过'type'表示'错误',则通过'message'引用'无效的用户名':

error是一个Object属性。要列出它们,您必须使用

var keys = Object.keys(myObject);