2

我想让会话变量(或任何其他变量)在视图中可用,而不会再次重复自己。

我想出了这个:

  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

2 回答 2

4

你看过动态助手吗?

从网站:

app.dynamicHelpers(obj)

注册动态视图助手。动态视图助手是简单的函数,它们接受 req、res 并在呈现视图之前针对服务器实例进行评估。该函数的返回值成为与其关联的局部变量。

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

大多数时候我喜欢把它变成一个函数。这样,只有在您在视图中调用该函数时才会调用它。

于 2011-03-09T22:02:41.373 回答
0

快递 v2.x

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

快递 v.3

app.use(function(req, res) {
  res.locals.session = req.session;
});
于 2013-02-09T06:40:21.087 回答