3

一旦我在 Express 中使用

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

如何从任何视图(*.marko 模板)中获取该变量?

我知道在 Jade 中,您应该能够像任何其他变量一样直接访问它,而无需将其从子模板传递给父模板。Marko JS 中的等价物是什么?

谢谢

4

1 回答 1

7

使用 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/#global-properties

如果您仍有疑问,请分享!

于 2016-01-12T23:54:48.717 回答