在Express中使用
设置全局变量app.use(function(req, res, next){
res.locals.isAuthenticated = true;
next();
});
如何从任何视图(* .marko模板)中获取该变量?
我知道在Jade中你应该能够像任何其他变量一样直接访问它,而不需要将它从子模板传递给父模板。什么是Marko JS中的等价物?
由于
答案 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
如果您还有疑问,请分享!