Express.js:在请求挂钩中为EJS添加变量

时间:2017-08-24 12:34:53

标签: javascript node.js express ejs

我希望在每个请求上呈现视图时添加一些供EJS使用的变量,就好像将它们与渲染函数中的变量一起添加一样:

res.render('view', {data: {my: 'object'}});

我有这个功能,我用它作为我的请求钩子:

app.use('/*', function(req, res, next) {
  function after_request() {
    console.log('called after');
  }
  function before_request() {
    console.log('called before');
  }
  before_request();
  res.on('finish', after_request);
  next();
});

哪种方法正常:

called before
GET /url/param 304 30.762 ms - -
called after

如果我只是将变量设置为请求对象,我可以在路径中获取变量并将其发送到渲染函数中,如下所示:

var variable = req.variable;
res.render('view', {data: {my: 'object', my: variable}});

但我希望能够不必在每条路线中设置这样的变量。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

您可以使用会话,它们允许您在用户会话的所有请求上共享值。

更多信息:https://github.com/expressjs/session

答案 1 :(得分:0)

如果有以下情况,我有时会使用res.locals

  • 我不想使用会话或在页面之间保持相同的值, 但每次调用中间件时都会设置

  • 变量的名称始终相同

  • 我使用帕格/玉视图

然后你可以:

app.use(function(req, res, next){
  res.locals.variable = "some content";
  next();
})

并在您的视图中

extends layout

block content
  p= variable //'some content'

这样您就不必在每个路径中设置变量