Есть коллекция sights, в нее вложена коллекция sight, которое имеет поле titleSight. Проблема с выводом значения titleSight в шаблон. Выдает ошибку: Cannot read property 'titleSight' of undefined. Как правильно вывести значение поле titleSight?
route.js
app.get('/sight-overall/:id', function (req, res) {
Promise.all([
Photo.find({}),
Sight.find({_id: req.params.id})
]).then(function (data) {
console.log('data:', data);
res.render('sight-overall.ejs', {photoList: data[0], sights: data[1], isAuth: req.isAuthenticated()});
});
sights-overall.ejs
<% var sights = JSON.stringify(sights) %>
<% if (locals.sights) { %>
<div class="sight-overall__header">
<h2><%= sights.sight.titleSight%></h2>
</div>
<% } %>
содержимое data:
содержимое бд:
Шаблонизатор пытается создать строку из вашего объекта, поэтому вы получаете такой результат.
Возьмем, например, такой объект:
sights = {
sight : {
title : "title"
}
}
И передадим в наш шаблон:
res.render('index', { data: sights });
Наш объект встает на свое место в ejs в виде строки поэтому мы получаем подобный результат: [object Object] при <%= data %>.
Но если во время шаблонизации мы обернем строку data (которая изначально была объектом) в JSON.stringify, то наша строка обратно станет объектом.
Таким образом мы получим: {"sight":{"title":"title"}} при <%= JSON.stringify(data) %>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости