在expressjs渲染中干燥布局本地化

我在nodejs中使用express,并试图保持我的视图呈现干燥。 在我的布局里面,我有以下的东西(我在用玉石)

body nav.login -if(currentUser) ="logged in information" -else ="logged out information" !=body 

问题是,我每次渲染,现在我需要有

 res.render('anything.jade',{ locals: { currentUser: req.session.currentUser, /*all of my other locals*/ } }); 

看起来像是一个痛苦,必须通过所有的渲染调用,并添加,然后做同样的事情,如果我必须添加任何其他当地人的布局。 有什么办法可以避免在我渲染的任何地方重新input“currentUser”到当地人

我知道这个答案已经晚了,但是对于后人来说:如果你使用express,你应该使用提供的dynamic助手,这些助手是视图可访问的帮助函数,它们将req,res作为参数。 在你的情况下:

 app.dynamicHelpers({ user: function(req, res){ return req.session.currentUser; } }); 

这意味着您的视图现在可以调用#{user}

我结束了以下工作:

首先,我设置了一些局部variables

 app.use(function(req,res,next){ req.localvars = new Object; next(); }); 

后来,我设置了一些局部variables

 app.use(function(req,res,next){ req.localvars.currentUser = req.session.currentUser; next(); }); 

我设置了渲染function

 function renderer(file){ return function(req,res,next){ res.render(file,{locals:req.localvars}); } } 

然后是路由function

 app.get('/',blah,blah,whatever,setSomeMoreLocalsHere,renderer(index.jade)); 

可能有更好的,但这是迄今为止我已经发现的最好的解决scheme

最简单的解决scheme是使用返回本地对象的函数。

 function(req) { return { currentUser: req.session.currentUser, /*all of my other locals*/ }; } res.render('anything.jade',{ locals: defaultLocals(req) });