2011-03-09 55 views
2

我想让会话变量(或任何其他)在视图中可用而不必重复一遍。变量在expressjs视图

我想出了这一点:

res.render('index', viewVariables(req, res, params, {}); 

而且viewVariables功能:

function viewVariables(req, res, params, options) { 
    var returnObject = options || {locals:{}}; 
    var locals = { 
    currentUser: req.currentUser ? req.currentUser : false 
    }; 
    returnObject.locals = mergeObjects(locals, returnObject.locals, true); 
    return returnObject; 
}; 

那不是最新版本expressjs工作(不同的渲染方法)。

有没有更简单或更优雅的解决方案? (好吧,我确定有!)

回答

4

你看过dynamichelpers吗?

从网站:

app.dynamicHelpers(obj) 

寄存器动态视图助手。 动态视图助手只是 接受req,res和 的函数将在呈现视图之前针对服务器 实例进行评估。 该功能 的返回值变为与 相关的局部变量。

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

大部分的时间我想使它成为一个功能来代替。这样,只有在视图中调用函数时才会调用它。

+1

是啊,RTFM!谢谢。 – fluxsaas 2011-03-11 08:53:35

+0

没问题:P .. – Alfred 2011-03-11 09:50:30

0

快速V2.X

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

快车3节

app.use(function(req, res) { 
    res.locals.session = req.session; 
});