在NodeJS/ExpressJS的res.locals中应用Getter属性返回数组
Apply Getter property returning array at res.locals in NodeJS/ExpressJS
我尝试为expressjs开发一个简单的flash函数(请不要链接到现有的库,我知道它们)。
一个问题就能让人头疼。如果我将request .session.flash赋值给res.local .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()
})
它可以工作,但问题是我必须在jade中执行一个函数,比如
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
我想你可能只是需要一个未定义的检查:
Object.defineProperty(res.locals, 'messages', {
get: function() {
var flash = req.session.flash || [];
req.session.flash = []
console.log('flash in getter', flash)
return flash
}
})
但老实说,我更喜欢messages()
方法。在Javascript中,人们通常不会期望对象属性表现得像带有getter/setter之类的c#属性一样。让消息成为一个函数可以让人们更清楚地阅读你的代码。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 跟踪在页面加载时应用内联样式的JavaScript
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 如果文本字段为空,则使用JavaScript应用CSS样式
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 查看JS对象的所有键,甚至是getter定义的键
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 从html创建一个指令,该指令按类名应用函数
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 我能告诉通用getter/setter在其主体中应用了什么属性吗
- 在NodeJS/ExpressJS的res.locals中应用Getter属性返回数组