【问题标题】:EJS only outputting some parts of object…EJS 只输出对象的某些部分......
【发布时间】:2015-03-15 18:59:00
【问题描述】:

这个让我很困惑。

我将一个对象传递给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按预期输出,其他的直接调用时输出空白。

【问题讨论】:

  • 如何将数据传递给 EJS?如果将console.log(country) 放入循环中,它会输出什么?
  • 所有输出正常!这就是疯狂的事情。当输出到控制台时(只是被传递到res.render),它很好,您在上面看到的输出是我直接在forEach 内输出country 时得到的。我无法理解它。
  • 添加编辑:_id 也输出正常。所以_idname 输出,没有别的。
  • console.log(Object.keys(country)) 怎么样,它打印什么?
  • @victorkohl 在 forEach 循环本身中?在 EJS 中使用时,console.logs 似乎没有为我输出。直接输出给我: $__,isNew,errors,_maxListeners,_doc,_pres,_posts,save,_events

标签: javascript node.js express ejs


【解决方案1】:

事实证明我犯了一个错误,尽管我没想到会导致这个问题。

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

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

【讨论】:

    【解决方案2】:
    { _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 中的数组

    【讨论】:

    • 对象在数组中,它是一个对象数组。请参阅我的答案以了解问题所在!
    • 虽然我明白为什么不清楚,但阅读了这个问题。该对象是country 的输出,而不是countries
    • 打印列表即可了解
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签