如何在玉石模板中添加用户栏

时间:2012-11-15 15:30:53

标签: node.js express pug

我试图了解如何在我的玉器布局中设置例如用户栏 我有我的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 })
};

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

如果我不清楚问我问题

谢谢:)

1 个答案:

答案 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..

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