Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Express + Node. js partial

#nodejs #express


проблема не выводит виджет (partial)  в шаблон houme

houme

Добро пожаловать на сайт турфирмы

{{>weather}} server function getWeatherData(){ return { locations: [{ name:'Protland', forecatUrl: 'http://www.wunderground.com/US/OR/Portland.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/cloudy.gif', weather:'Cloudy', temp: '54.1 F (12.3 C)' }, { name: 'Band', forecatUrl: 'http://www.wunderground.com/US/OR/Band.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/rain.gif', weather:'Rain', temp: '55.0 F (12.8 C)' }, { name: 'Minsanita', forecatUrl: 'http://www.wunderground.com/US/OR/Minzanita.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/rain.gif', weather:'Rain', temp: '55.0 F (12.8 C)' }] }; } //Виджет app.use(function(req, res, next){ if (!res.locals.partials) res.locals.partials = {}; res.locals.partials.weatherContext = getWeatherData(); next(); }); views/partial/weather
{{#each partials.weatherContext.locations}} {{/each}} Источник: Weather Ground
**Это пример с учебника. Почему не работает не пойму. Шаблон с ссылкой выводит нормально все что находиться в блоке each вообще не выводит.


Ответы

Ответ 1



Уххх, как весело:) Вы используете шаблонный менеджер handlebars. Обычный пакет handlebars у Вас уже 99% стоит, но сверху еще надо сделать вот так npm i hbs Добавляем в какую-нибудь корневую для рэндэров middleware следующий код const hbs = require('hbs'); // лучше вне middleware // папка с partials!! hbs.registerPartial('weather', fs.readFileSync(__dirname + '/../views/partials/weather.hbs', 'utf8')); Обратите внимание на строку с путем - начинается со слеша, задается относительно файла, в котором находится. После указанных выше манипуляций у меня Ваш пример, хоть чуть и упрощенный стартанул. Если Вам не удастся воспроизвести по этому ответу, выложу код на гит, или дополню ответ где надо.

Ответ 2



Попробуйте так: app.use(function(req, res, next){ if (!res.locals.partials) res.locals.partials = {}; res.locals.partials.weatherContext = getWeatherData(); next(); }); Поставьте перед началом маршрутизации: app.get('/', function (req, res) { res.render('home'); });

Комментариев нет:

Отправить комментарий