【问题标题】:Accessing session variable in JADE在 JADE 中访问会话变量
【发布时间】:2016-02-11 13:00:14
【问题描述】:

我的GET /new 端点如下所示:

router.get('/new', function(req, res) {
  console.log(JSON.stringify(req.session.application)); //<-- This prints FINE

  res.render('new', { 
    title: 'Add a new intent'
  });
});

而且,要渲染的new.jade 文件如下所示:

...
h1 #{application.name}
...

当我在控制台上打印req.session.application 对象时,它打印得很好,但是当new.jade 被渲染时,它没有从会话中找到application 对象并认为它是null。我错过了什么?

【问题讨论】:

    标签: javascript node.js session express pug


    【解决方案1】:

    为模板提供变量

    res.render('new', { 
      // <- here is all variables that will be available in jade
      title: 'Add a new intent',
      application: req.session.application
    });
    

    【讨论】:

    • 但是,如果我想直接从jade中访问会话变量而不是创建一个局部变量呢?
    • res.render('new', {session: req.session});
    【解决方案2】:

    我最终编写了一个快速的中间件函数来检查会话中是否存在application 对象并将其添加到会话对象中,如下所示。通过此更改,我无需在渲染 Jade 视图时将 req.session.application 对象传递给 res.render() 方法。

    app.js 中的中间件:

    app.use(function(req, res, next) {
    
      if (req.session && req.session.application) {
        mongoose.model('Application').findOne({ _id: req.session.application._id }, function(err, application) {
          if (application) {
            req.application = application;
            req.session.application = application;  //refresh the session value
            res.locals.application = application;
          }
          // finishing processing the middleware and run the route
          next();
        });
      } else {
        next();
      }
    });
    

    Jade 视图中的片段:

    ...
    h1 #{application.name}
    ...
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 2013-06-16
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多