新手问题部分

我有一个简单的页面,头,菜单,内容和页脚。 我需要将它们分成不同的文件。 通过快速文档阅读后(我创build了4个模板)写下这样的东西:

app.get('/', function(req, res) { var response = [null, null, null, null] , everyNotNull = function(elem) { return (elem !== null); }, sendResponse = function(type, str) { switch (type) { case 'head' : response[0] = str; break; case 'menu' : response[1] = str; break; case 'content' : response[2] = str; break; case 'footer' : response[3] = str; break; } if (response.every(everyNotNull)) { res.send(response.join('')); } }; res.partial('head', {'title' : 'page title'}, function(err, str) { sendResponse('head', str); }); res.partial('menu', {'active' : '/'}, function(err, str) { sendResponse('menu', str); }); res.partial('index', {'title' : 'Home'}, function(err, str) { sendResponse('content', str); }); res.partial('footer', {'nowdate' : (new Date()).getFullYear()}, function(err, str) { sendResponse('footer', str); }); }); 

虽然它的作品,我似乎有点肮脏。 有没有更好的方法来使用部分模板?

你怀疑有些事情是错的,你在那里做了不必要的工作。

Express会将模板拼接在一起,只需调用res.render()和要调用的视图的名称即可。 布局和部分应该自动拉入。

在我的应用程序中,我通常使用partials如下。 只要用你正在使用的模板引擎(Jade,胡须等)replace引用EJS:

./lib/app.js

 app.get('/', function(req, res) { var model = { layout:'customLayout', // defaults to layout.(ejs|jade|whatever) locals:{ foo:'bar' } }; res.render('index',model); }); 

./views/layout.ejs

 <html> <head><%- partial('partials/head') %></head> <body> <%- partial('partials/menu') %> <%- body %> <%- partial('partials/footer') %> </body> </html> 

./views/index.ejs

 <h1>Index page</h1> 

./views/partials/menu.ejs

 <div><a href='... </div> 

./views/partials/head.ejs

 <script>...</script> etc.