布局玉导航栏

我想有一个导航栏,这是没有硬编码,但从控制器采取其项目。 我的问题是,虽然我不想在每个页面控制器中设置导航栏项目,但只能在一个文件中使用它们,并将它们用于具有相同布局的所有页面。 所以这是我的layout.jade

doctype 5 html(lang='en') head meta(charset='UTF-8') meta(name='viewport', content='width=device-width') title= '™DreamTechnologies' block css link(rel='stylesheet', href='/components/bootstrap/dist/css/bootstrap.min.css') include styles.css block js script(src='http://localhost:35729/livereload.js') body nav.navbar.navbar-inverse(role="navigation") .container-fluid .navbar-header a.navbar-brand(href="/") |HOME .collapse.navbar-collapse ul.nav.navbar-nav each item in navitems li a(href=item.link) =item.content div.page-header h1 =title block content 

我的问题是如何parsing这些navitems,所以我在每一页上都有。 现在我只是在每个控制器中使用它:

 exports.index = function(req, res){ res.render('home/index', { title: '™DreamTechnologies', navitems: [ {link: 'this', content: 'that'}, {link: 'secondLink', content: 'secondContent'} ] }); }; 

当然,如果我只在这里写他们,我只在主页上导航…

您可以使用app.locals将公共数据传递给所有模板。 从文档 :

app.locals

应用程序本地variables被提供给在应用程序中呈现的所有模板。 这对于为模板提供帮助函数以及应用程序级别的数据非常有用。

app.locals对象是一个JavaScript Object 。 添加到它的属性将在应用程序中作为局部variables显示。

您可以通过以下方式将其纳入您的网站:

 app.locals.navitems = [ {link: 'this', content: 'that'}, {link: 'secondLink', content: 'secondContent'} ]; app.get('/', function(req, res) { res.render('home/index', { title: '™DreamTechnologies' }); }); app.get('/about', function(req, res) { res.render('home/about', { title: '™DreamTechnologies - About' }); }); 

navitemsvariables现在可用于res.render生成的所有模板。