Почему этот шаблон работает некорректно?

Я получаю сообщение об ошибке при запуске своего экспресс-сервера и вызове стороны. Любые идеи, что не так с синтаксисом. 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.info перед рендерингом, я получаю:

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]
  }

Что вы сделали, чтобы убедиться, что startzeit — это Date, как вы утверждаете? Потому что очевидно, что на данный момент это на самом деле undefined.

Marty 11.07.2019 07:21

Я ничего не сделал, чтобы проверить, должно ли это происходить через module.exports моего класса модели?

Willey3x37 11.07.2019 07:23

Просто добавьте console.info(model.seminare) перед res.render(...).

Marty 11.07.2019 07:24

Я сделал, и я добавил это выше

Willey3x37 11.07.2019 07:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возможно, некоторые записи в model.seminare не имеют свойства startzeit. Попробуйте добавить блок if, чтобы проверить, имеет ли seminar свойство startzeit.

<%if (seminar.startzeit != undefined) { %>
    <td><%= seminar.startzeit.getDate() %>.<%= seminar.startzeit.getMonth()+1 %>.
    <%= seminar.startzeit.getFullYear() %></td>
<% } %>
Ответ принят как подходящий

Проблема возникает в петле for.

Пожалуйста, обратите внимание на разницу ниже:

для ... в

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

для ... из

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

Что вам нужно, так это петля for ... of.

Другие вопросы по теме