Как использовать среду нунджака в экспресс-приложении для глобальных переменных?

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

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

Я знаю о nunjucks addGlobal (http://mozilla.github.io/nunjucks/api.html#addglobal) здесь, но не знаю, как связать среду с моим текущим блоком конфигурации. Поскольку он не работает, я предполагаю, что это как-то связано с моей настройкой.

Вот что у меня есть для моей настройки конфигурации:

const viewFolders = [
  path.join(__dirname, '..', 'views')
];

// *** view engine *** //
nunjucks.configure(viewFolders, {
  express: app,
  autoescape: true
});
var env = new nunjucks.Environment(new nunjucks.FileSystemLoader('views'));
console.log(env);
env.addGlobal('logged_in','FROM Module');
app.set('view engine', 'html');

Как видите, я следил за документацией, и в моем шаблоне есть {{logged_in}}, но он ничего не показывает. Теперь мои другие переменные рендеринга работают нормально. Но я думаю, мне нужно как-то связать мой env с моей конфигурацией nunjucks?

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

Заранее спасибо за любую помощь, которую я получу.


person Morphasis    schedule 16.01.2018    source источник
comment
Все res.locals-переменные доступны в шаблонах. Вы можете поместить глобальные переменные в res.locals в некоторых промежуточных слоях.   -  person Aikon Mogwai    schedule 16.01.2018


Ответы (2)


Используйте res.locals:

Объект, который содержит локальные переменные ответа, относящиеся к запросу и, следовательно, доступные только для представлений, отображаемых во время этого цикла запроса/ответа (если есть).

person Francisco Mateo    schedule 16.01.2018
comment
Кстати, если это неясно, внутри шаблонов можно использовать все res.locals. - person Morphasis; 22.01.2018

Так и с конфигурационным блоком. Вам нужно установить его в переменную, а затем сослаться на нее, чтобы установить глобальные переменные.

eg.

var env;
env = nunjucks.configure(viewFolders, {
  express: app,
  autoescape: true
});
env.addGlobal('logged_in','FROM Module');
person Morphasis    schedule 22.01.2018
comment
Если вы используете конфигурацию, похожую на мою. Вы можете добавить его в объект приложения. например: app.nunjucks_env Затем мне нужно проверить, есть ли пользователь, поэтому я могу просто использовать app.use для регистрации промежуточного программного обеспечения, которое проверяет, присутствует ли пользователь, и успешно устанавливает мои глобальные переменные в любом из моих шаблонов. - person Morphasis; 22.01.2018