Глобальная переменная в Marko JS Template и Express

Однажды я установил глобальную переменную в Express, используя

app.use(function(req, res, next){
  res.locals.isAuthenticated = true;
  next();
});

Как я могу получить эту переменную из любого представления (шаблон *.marko)?

Я знаю, что в Jade у вас должен быть доступ к нему напрямую, как и к любой другой переменной, без необходимости передавать его от дочернего к родительскому шаблону. Что эквивалентно в Marko JS?

Спасибо

1 ответ

С Marko вы обычно хотите обойти механизм представления Express и визуализировать шаблон непосредственно для записи res поток:

var template = require('./template.marko');

app.use(function(req, res){
  var templateData = { ... };
  template.render(templateData, res);
});

При таком подходе вы получаете полный контроль над тем, какие данные передаются в ваш шаблон. Технически у вас есть доступ к res.locals в вашем шаблоне, сделав следующее:

<div if="out.stream.locals.isAuthenticated">

НОТА: out.stream это просто ссылка на записываемый поток, в который выполняется запись (в данном случае res)

У вас есть несколько других вариантов:

использование res.locals как данные шаблона

var template = require('./template.marko');

app.use(function(req, res){
  var templateData = res.locals;
  template.render(templateData, res);
});

Создать шаблон данных из res.locals

var template = require('./template.marko');

app.use(function(req, res){
  var templateData = {
    isAuthenticated: res.locals.isAuthenticated
  };
  template.render(templateData, res);
});

Marko также поддерживает "глобальные" данные, доступные через out.global, Смотрите: http://markojs.com/docs/marko/language-guide/

Если у вас остались вопросы, пожалуйста, поделитесь!

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