如何添加数据以将数据自动添加到每个Express res.render调用中?

时间:2018-07-25 13:14:30

标签: node.js express

在Express 4服务器中,我具有一个中间件功能,该功能可以检查用户是否已登录并相应地调整请求。

app.use((req, res, next) => {
  const { IdToken } = req.signedCookies;
  if (!IdToken) {
    req.signedIn = false;
  } else {
    // TODO: Verify IdToken
    req.signedIn = true;
  }
  next();
});

当前,在每条路由中,我都手动将登录状态添加到每个res.render

router.get('/', (req, res) => {
  res.render('index', { signedIn: req.signedIn });
});

我可以以某种方式包括此信息,而无需将其手动添加到每个res.render呼叫中吗?

1 个答案:

答案 0 :(得分:0)

添加一个中间件,该中间件添加一个req.view函数和一个req.addState函数。

function addViewer(req, res, next) {
  req.state = {}
  req.addState = function(key, value) {
     req.state[key] = value
  }
  res.view = function(viewName, moreState) {
    res.render(viewName, Object.assign({}, req.state, moreState));
  }
  next();
}

现在您可以呼叫res.view而不是res.render。请注意,您可以使视图功能更强大,并且addState更可自定义。