如何添加一个用户栏在玉模板

我想了解如何设置为例在我的玉布局实际的用户栏我有我的layout.jade:

doctype 5 html head title= title link(rel='stylesheet', href='/stylesheets/style.css') body include userbar block content 

在我的包括我只有当前页面上的可变环境。

不要咬我,我将以Symfony2为例说明一个例子:D例如,如果你在你的布局中有这个代码

 {% render "AcmeBundle:Acme:menu" %} 

它会调用AcmeController和menuAction()方法,而不pipe当前页面

我想要有相同的系统:在我的玉页的渲染将要求例如requestHandler

 exports.userbar = function(req, res){ var user = 'ant'; res.render('userbar', { user: user }) }; 

现在,这将呈现我的用户栏:)但我不知道如何与玉做

如果我不清楚的问我问题

谢谢 :)

在你的情况下,你必须在每个页面中添加{% render "AcmeBundle:Acme:menu" %} 。 明示,我认为你更容易做同样的事情。 你在这里有不同的select。 第一个select是在特定的请求处理程序中使用user中间件

添加一个快速的中间件,只需find用户并设置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.. 

我希望这能解决你的问题。