Marko JS模板和Express中的全局变量

时间:2016-01-12 18:29:43

标签: node.js marko

在Express中使用

设置全局变量
app.use(function(req, res, next){
  res.locals.isAuthenticated = true;
  next();
});

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

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

由于

1 个答案:

答案 0 :(得分:7)

使用Marko,您通常需要bypass the Express view engine并将模板直接呈现给可写的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还支持&#34;全球&#34;可以使用out.global访问的数据。请参阅:http://markojs.com/docs/marko/language-guide/#global-properties

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