我试图了解如何在我的玉器布局中设置例如用户栏 我有我的layout.jade:
doctype 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
include userbar
block content
在我的包含中,我只在当前页面上拥有可变环境。
不要咬我,我会以Symfony2 franmwork为例:D 例如,如果您的布局中有此代码
{% render "AcmeBundle:Acme:menu" %}
无论当前页面是什么,它都会调用AcmeController和menuAction()方法
我想拥有相同的系统:我的玉页中的渲染将调用例如一个requestHandler
exports.userbar = function(req, res){
var user = 'ant';
res.render('userbar', { user: user })
};
现在这将呈现我的用户栏:) 但我不知道如何用玉石做这件事
如果我不清楚问我问题
谢谢:)
答案 0 :(得分:3)
在您的情况下,您还必须在每个页面中添加{% render "AcmeBundle:Acme:menu" %}
。在快递中,我认为你更容易做同样的任务。你有不同的选择。第一种选择是在特定请求处理程序中使用user
中间件,如
添加一个简单查找用户并设置app.locals
属性的快速中间件。 app.locals
对所有玉文件都可见。例如,这个简单的中间件应该足够了
var user = function(req, res, next)
{
var user = db.find(...);
app.locals({user: user});
next(); // Do not render the page here, call the next()
}
然后在您的路由中,使用var user
,如下所示:
app.get('/your_desired_url', user, function(req, res) {
res.render('your_required_jade_file')
});
您可以在任何所需的请求处理程序中使用此方法;例如,
app.get('/your_desired_url2', user, function(req, res) {
res.render('your_required_jade_file')
});
app.get('/your_desired_url2', user, function(req, res) {
res.render('your_required_jade_file')
});
在第二个选项中,您可以将此中间件添加为常规中间件,例如
app.use(function(req, res, next) {
var user = db.find(...);
if(user) app.locals({user: user});
else app.locals({user: null});
next(); // Do not render the page here, call the next()
});
在第二种情况下,所有请求都通过此函数传递,因此在.jade文件中,user
varabile始终可用。
在.jade结构中,您可以使用以下内容
layout.jade
!!! 5
html
head
body
include userbar
block content
,例如dashboard.jade
:
extends ./layout
block content
// Your dashboard specific content goes here..
我希望这能解决你的问题。