Мне интересно, есть ли простой способ получить доступ к переменным req или сеанса Express.js из шаблона Jade, не передавая их через обычный ответ.
Или это единственный способ ?
res.render('/', {
session: req.session
});
Просто добавьте
app.use(express.cookieParser());
app.use(express.session({secret: '1234567890QWERTY'}));
app.use(function(req,res,next){
res.locals.session = req.session;
next();
});
Перед
app.use(app.router);
и получите сеанс в нефрите
p #{session}
просто используйте промежуточное ПО.
app.use(function (req, res, next) {
var origRender = res.render;
res.render = function (view, locals, callback) {
if ('function' == typeof locals) {
callback = locals;
locals = undefined;
}
if (!locals) {
locals = {};
}
locals.req = req;
origRender.call(res, view, locals, callback);
};
next();
});
После чего вы можете использовать «# {req}» для ссылки на него в нефритовом шаблоне.
Предположим, у вас есть объект «пользователь» в «req», а «пользователь» имеет метод «isAnonymous», если ваш user.isAnonymous () возвращает true,
p #{req.user.isAnonymous()}
будет будет отображаться как:
<p>true</p>
В то время как в javascript всегда есть возможность выйти из области видимости и ползти вверх, я действительно действительно действительно действительно действительно сильно призываю вас найти другой путь.
Подумайте над тем, что вы спрашиваете: могу ли я узнать, что мой взгляд о кишках моего контроллера?
Предполагается, что представление берет данные и преобразует их в разметку. Вот и все. Если вы делаете что-то еще, вы делаете это неправильно. Мне все равно, насколько это "легко". В этом смысл интерфейса. Чтобы точно определить, что передается, и облегчить замену одной вещи на другую.