为什么该模板无法正常工作?

时间:2019-07-11 05:18:34

标签: javascript node.js express ejs

启动Express服务器并致电服务端时出现错误。任何想法有关语法的错误。 startzeit是一个Date()对象。

<tbody>
          <% for (let seminar in seminare){ %>
            <tr>
                <td><%= seminar.titel %></td>
                <td><%= seminar.startzeit.getDate() %>.<%= seminar.startzeit.getMonth()+1 %>.
                <%= seminar.startzeit.getFullYear() %></td>
                <td><%= seminar.ort %></td>
            </tr>
         <% }; %>
        </tbody>

这就是我如何称呼模板:

res.render('Seminare', {seminare: model.seminare});

我从具有对象数组的模型中获取数据,这些对象具有此属性。

我收到的错误消息是:

TypeError: /Users/Jannik/Documents/Atom/Web-Praktika/praktikum12/seminarApp-v2/views/Seminare.ejs:51
    49|             <tr>
    50|                 <td><%= seminar.titel %></td>
 >> 51|                 <td><%= seminar.startzeit.getDate() %>.<%= seminar.startzeit.getMonth()+1 %>.
    52|                 <%= seminar.startzeit.getFullYear() %></td>
    53|                 <td><%= seminar.ort %></td>
    54|             </tr>

Cannot read property 'getDate' of undefined
    at eval (eval at compile (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/ejs/lib/ejs.js:633:12), <anonymous>:23:44)
    at returnedFn (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/ejs/lib/ejs.js:668:17)
    at tryHandleCache (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/ejs/lib/ejs.js:254:36)
    at View.exports.renderFile [as engine] (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/ejs/lib/ejs.js:485:10)
    at View.render (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/express/lib/view.js:135:8)
    at tryRender (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/express/lib/application.js:640:10)
    at Function.render (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/express/lib/response.js:1012:7)
    at /Users/Jannik/Documents/Atom/Web-Praktika/praktikum12/seminarApp-v2/routes/seminare.js:7:7
    at Layer.handle [as handle_request] (/Users/Jannik/Documents/Atom/Web-Praktika/node_modules/express/lib/router/layer.js:95:5)

当我在渲染之前添加console.log时,我得到:

Seminar {
    titel: 'Unternehmensgründung',
    name: 'Unternehmensgründung',
    ort: 'dortmund',
    startzeit: 2019-01-20T11:00:00.000Z,
    endzeit: 2019-02-20T13:00:00.000Z,
    freiePlaetze: 10,
    gesamtePlaetze: 22,
    tutoren: [ 'amk1' ],
    getBplaetze: [Function]
  },
  Seminar {
    titel: 'Unternehmensgründung',
    name: 'Unternehmensgründung',
    ort: 'dortmund',
    startzeit: 2019-02-20T11:00:00.000Z,
    endzeit: 2019-03-20T14:00:00.000Z,
    freiePlaetze: 5,
    gesamtePlaetze: 20,
    tutoren: [ 'bruh' ],
    getBplaetze: [Function]
  }

2 个答案:

答案 0 :(得分:1)

也许model.seminare中的某些条目没有startzeit属性。尝试添加一个if块来检查seminar是否具有startzeit属性。

<%if (seminar.startzeit != undefined) { %>
    <td><%= seminar.startzeit.getDate() %>.<%= seminar.startzeit.getMonth()+1 %>.
    <%= seminar.startzeit.getFullYear() %></td>
<% } %>

答案 1 :(得分:1)

问题发生在for循环中。

请查看以下区别:

用于...中

for (let index in array) {
   let item = array[index];
   console.log(item);
}

用于...的

for (let item of array) {
   console.log(item);
}

您需要的是for ... of循环。