一旦我在Express中使用以下方法设置了全局变量

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

如何从任何 View (* .marko模板)内部获取该变量?

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

谢谢

最佳答案

使用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还支持可使用out.global访问的“全局”数据。另请:http://markojs.com/docs/marko/language-guide/#global-properties

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

关于node.js - Marko JS Template和Express中的全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34751226/

10-09 17:42