【发布时间】:2015-05-24 10:36:35
【问题描述】:
我尝试为 expressjs 开发一个简单的 flash 功能(请不要链接到现有库,我知道它们)。
一个问题就让人头疼。如果我将 req.session.flash 分配给 res.locals.messages,我想让数组设置为 [] 如果您阅读它。背景:如果一个玉模板迭代它,迭代后它应该是空的,否则你会再次看到旧消息。
到目前为止的代码:
app.use(function(req, res, next) {
assert(req.session, 'req.session is required!')
if (!util.isArray(req.session.flash)) {
req.session.flash = []
}
console.log(req.session.flash)
res.locals.messages = function() {
var flash = req.session.flash
req.session.flash = []
return flash
}
res.flash = function(type, msg) {
console.log('res.flash')
req.session.flash.push({
type: type,
msg: msg
})
}
next()
})
它可以工作,但问题是我必须像翡翠一样执行一个函数
for flash in messages()
.alert.alert-danger
strong= flash.msg
但我希望它更像这样:
for flash in messages
.alert.alert-danger
strong= flash.msg
没有 ()
任何想法如何让它像这样工作?
编辑:
一种方法接近解决方案,但尚未完成。
if (!res.locals.messages) {
Object.defineProperty(res.locals, 'messages', {
get: function() {
var flash = req.session.flash
req.session.flash = []
console.log('flash in getter', flash)
return flash
}
})
}
问题是,我得到了错误
Cannot read property 'length' of undefined
【问题讨论】:
标签: javascript node.js express pug