Итак, вот моя проблема. Я пытаюсь сделать 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'
},
]
Я пробовал несколько вещей и всегда получаю ошибку что карты не определены. Куда мне это поставить? Я был бы очень признателен за помощь в этом!
@ jfriend00 Я обновил свой пост экспресс-кодом.



Вы должны передать cards в res.render(). Сделать это можно так:
app.get('/store', function(req, res) {
res.render('store', {
user: req.user,
title: 'Store',
cards: cards
});
});
Я не эксперт по EJS, поэтому не могу комментировать, правильно ли спроектированы ваши шаблоны EJS, но именно так вы передаете данные в любой из Express-совместимых механизмов шаблонов, о чем, я думаю, вы спрашивали.
Так вот, я просто экспортирую массив карт из другого js файла?
@Zack - если он объявлен или создан в другом файле, вам придется импортировать его туда, куда вы вызываете res.render(), потому что там он вам нужен.
Да, я использовал module.exports, и у меня была опечатка. Я скопировал и вставил другой экспорт, который я импортировал, но забыл изменить имя. Однако теперь я получаю новую ошибку, в которой говорится, что card.forEach не является функцией
@Zack - Похоже, cards не является массивом. Я не могу отладить код, который не вижу, но похоже, что cards теперь определен, но не является массивом.
вот мой модуль .exports module.exports = { cards: [ { titleCard: 'some text', desc: 'Some description' }, { titleCard: 'some text2', desc: 'Some description2' } ] };
У меня есть ошибка, которую нужно устранить, включив <% var cards = Array.from(cards) %>. Я вошел в консоль, и она возвращает пустой пустой массив
Вот пара вещей, которые могут помочь:
1- Убедитесь, что вы правильно экспортируете этот модуль карт, по сути, вы не можете просто импортировать его без явного экспорта.
2- Попробуйте использовать параметр объекта для метода включения
<% include('_includes/cards.ejs', {card : card}) %>
Прошу прощения, я не могу проверить это прямо сейчас, но попробуйте это и дайте мне знать, сработало ли это.
Я считаю, что сделал то, что вы сказали, но это не сработало. Я действительно не знаю, в чем проблема.
@Zack - Я предполагаю, что вы неправильно выполняете экспорт и импорт. Покажите точный код, который экспортирует массив cards, покажите код, который его импортирует, и покажите строку кода res.render(), которую вы используете. Вы можете добавить их в конец своего вопроса.
Вы не показываете свой экспресс-код, но вы должны передать
cardsвres.render(), чтобы у EJS были данные, когда он пытается отобразить страницу. Любой базовый пример использования EJS с Express должен показать вам, как вы передаете данные, которые будут использоваться при рендеринге шаблона.