从Jade模板访问Express.js req或session

MrB*_*les 27 node.js express pug

我想知道是否有一种简单的方法可以从Jade模板中访问Express.js的req或会话变量,而不通过正常响应传递它.

或者这是唯一的方法吗?

res.render('/', {
    session: req.session
});
Run Code Online (Sandbox Code Playgroud)

Ajo*_*uve 53

只需添加

app.use(express.cookieParser());
app.use(express.session({secret: '1234567890QWERTY'}));
app.use(function(req,res,next){
    res.locals.session = req.session;
    next();
});
Run Code Online (Sandbox Code Playgroud)

之前

app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

让你的会话在玉

p #{session}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.简单实用. (2认同)

Dav*_*don 46

在express 3.x中,dynamicHelpers已被删除,因此您需要使用中间件和res.locals.假设我们想要req.query/signup/new视图中访问:

localQuery = function(req, res, next) {
  res.locals.query = req.query;
  next();
};

newSignup = function(req, res) {
  res.render('signup/new');
};

app.get('signup/new', localQuery, newSignup);
Run Code Online (Sandbox Code Playgroud)

现在任何使用localQuery中间件的路由都会res.locals.query设置.然后可以在您的视图中访问它query.

  • 几个小时以来我的脑袋都在燃烧.你是一个救生员:) (3认同)

Dom*_*nes 21

您需要创建一个dynamicHelperfor Express才能使用.

app.dynamicHelpers({
    session: function (req, res) {
        return req.session;
    }
});
Run Code Online (Sandbox Code Playgroud)

然后在模板中,您可以使用<%= session.logged_in %>或其他.

注意:Express 3中不推荐使用dynamicHelpers