新手到EJS,
尝试从MongoDB获取数据并在视图中显示。如果没有数据,显示“otherCondition”,如果有数据,请循环并显示“repeat”和“unrelated”
<% if (typeof eventData == 'object'){ %> // check if its empty/undefined
<% eventData.forEach(function(event) { %> // loop if exists
<div class="repeat">
... // other code
</div>
<% }) %> // end of loop
<div class="unrelated">
... // other code (again)
</div>
<% } else { %> // else condition
<div class="otherCondition">
... // other code (again)
</div>
<% } %>
上面的EJS代码,路由代码如下:
router.route('/').get(function(req, res, next) {
mongoose.model('Event').find({}, function(err, events) {
if (err) {
return console.error(err);
} else {
res.format({
html: function() {
res.render('events', {
eventData: events,
user: req.user,
});
if (typeof eventData == 'object')
console.log('display new events: ' + eventData);
else
console.log('no events, sorry :(');
}
});
}
});
})
可能是另一个愚蠢的问题,但任何人都可以帮我解决这个问题吗?在控制台中,我得到no events, sorry :(
,但我的<div class="otherCondition"></div>
没有显示。
提前致谢。
答案 0 :(得分:0)
此处eventData始终是一个数组,因为在服务器端,您使用的查询是 find()方法, 所以 typeof eventData将始终返回一个对象,因此您的第一个条件始终为true,因此控制器永远不会转到otherCondition。
如果条件
,最好先检查eventData的lenth
<% if(constructor.eventData === Array && eventData.length > 0){ %>
<% eventData.forEach(function(event) { %> // loop if exists
<div class="repeat">
... // other code
</div>
<% }) %> // end of loop
<div class="unrelated">
... // other code (again)
</div>
<% }else{ %>
<div class="otherCondition">
... // other code (again)
</div>
<% } %>