Цикл Ejs forEach не определен

Итак, вот моя проблема. Я пытаюсь сделать forEach в ejs, который будет отображать html на странице. Вот страница магазина для цикла ejs forEach.

<% include _includes/header.ejs %>
   <div class = "container">
     <% cards.forEach( card => { %>
      <% include('_includes/cards.ejs', card) %>
  <% }) %>
</div>
<% include _includes/footer.ejs %>

вот файл cards.ejs

<div class = "card" style = "width: 18rem;">
  <img class = "card-img-top" src='' alt = "Card image cap">
  <div class = "card-body">
    <h5 class = "card-title"><%= titleCard %></h5>
    <p class = "card-text"><%= desc %></p>
    <a href = "#" class = "btn btn-primary">Go somewhere</a>
  </div>
</div>

Вот мой экспресс-код для страницы магазина

 app.get('/store', function(req, res) {
  res.render('store', {
    user: req.user,
    title: 'Store'});
});

и наконец это

cards = [
  {
    titleCard: 'title 1',
    desc: 'just some text'
  },
  {
    titleCard: 'title 1',
    desc: 'just some text'
  },
  {
    titleCard: 'title 1',
    desc: 'just some text'
  },
]

Я пробовал несколько вещей и всегда получаю ошибку что карты не определены. Куда мне это поставить? Я был бы очень признателен за помощь в этом!

Вы не показываете свой экспресс-код, но вы должны передать cards в res.render(), чтобы у EJS были данные, когда он пытается отобразить страницу. Любой базовый пример использования EJS с Express должен показать вам, как вы передаете данные, которые будут использоваться при рендеринге шаблона.

jfriend00 26.07.2018 00:27

@ jfriend00 Я обновил свой пост экспресс-кодом.

Zack 26.07.2018 00:45
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
4
2
14 727
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны передать cards в res.render(). Сделать это можно так:

app.get('/store', function(req, res) {
  res.render('store', {
    user: req.user,
    title: 'Store',
    cards: cards
  });
});

Я не эксперт по EJS, поэтому не могу комментировать, правильно ли спроектированы ваши шаблоны EJS, но именно так вы передаете данные в любой из Express-совместимых механизмов шаблонов, о чем, я думаю, вы спрашивали.

jfriend00 26.07.2018 00:49

Так вот, я просто экспортирую массив карт из другого js файла?

Zack 26.07.2018 04:46

@Zack - если он объявлен или создан в другом файле, вам придется импортировать его туда, куда вы вызываете res.render(), потому что там он вам нужен.

jfriend00 26.07.2018 04:47

Да, я использовал module.exports, и у меня была опечатка. Я скопировал и вставил другой экспорт, который я импортировал, но забыл изменить имя. Однако теперь я получаю новую ошибку, в которой говорится, что card.forEach не является функцией

Zack 26.07.2018 06:13

@Zack - Похоже, cards не является массивом. Я не могу отладить код, который не вижу, но похоже, что cards теперь определен, но не является массивом.

jfriend00 26.07.2018 06:18

вот мой модуль .exports module.exports = { cards: [ { titleCard: 'some text', desc: 'Some description' }, { titleCard: 'some text2', desc: 'Some description2' } ] };

Zack 26.07.2018 15:45

У меня есть ошибка, которую нужно устранить, включив <% var cards = Array.from(cards) %>. Я вошел в консоль, и она возвращает пустой пустой массив

Zack 26.07.2018 16:32

Вот пара вещей, которые могут помочь:

1- Убедитесь, что вы правильно экспортируете этот модуль карт, по сути, вы не можете просто импортировать его без явного экспорта.

2- Попробуйте использовать параметр объекта для метода включения

<% include('_includes/cards.ejs', {card : card}) %>

Прошу прощения, я не могу проверить это прямо сейчас, но попробуйте это и дайте мне знать, сработало ли это.

Я считаю, что сделал то, что вы сказали, но это не сработало. Я действительно не знаю, в чем проблема.

Zack 26.07.2018 04:45

@Zack - Я предполагаю, что вы неправильно выполняете экспорт и импорт. Покажите точный код, который экспортирует массив cards, покажите код, который его импортирует, и покажите строку кода res.render(), которую вы используете. Вы можете добавить их в конец своего вопроса.

jfriend00 26.07.2018 22:08

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