EJS只输出对象的某些部分......

时间:2015-03-15 18:59:01

标签: javascript node.js express ejs

这个让我感到困惑。

我正在将一个对象传递给ejs模板;如果我输出那个对象,我看到了我的期望:

{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] }

如果我在循环中输出name,它就像我期望的那样工作:

<%countries.forEach (function(country, index) {%>
    <li><%= country.name %></li> // Outputs 'United Kingdom'
<% }) %>

但是,如果我尝试访问以外的任何名称,则输出空白:

<%countries.forEach (function(country, index) {%>
    <li><%= country.code %></li> // Outputs ''
<% }) %>

我无法弄清楚,我做的事情显然是错误的,或者这是否像我想的那样疯狂?

编辑:_id也将输出。因此_idname按预期输出,所有其他输出在直接调用时输出为空白。

2 个答案:

答案 0 :(得分:0)

事实证明我犯了一个错误,虽然不是我预期会导致这个问题的错误。

我用于检索国家/地区数据的架构的Mongoose模型中包含错误的架构。它是来自另一个模型的复制和粘贴工作,我显然更新了除模式本身之外的所有内容,重要的是name是两个模式之间唯一的常见变量,所以我猜这就是为什么这是唯一的模式“工作”(当然还有_id)。

如果有人能告诉我为什么这就是我想知道的情况,因为虽然这绝对是解决方案,但我不知道为什么架构会影响ejs的能力读取对象中的变量,但没有问题完全输出对象本身。

答案 1 :(得分:0)

{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] }

你不要在对象上循环

<%countries.forEach (function(country, index) {%>
    <li><%= country.name %></li> // Outputs 'United Kingdom'
<% }) %>

在ejs视图中你正在尝试循环游览

在控制器内部,您必须传递给这样的视图

[{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] }]

forEach适用于javascript中的数组