从Express 3.0开始,Express抛弃了layout的概念,而转为通过模板引擎的block或者include提供对页面分块的支持。
第一步:
方法一,进入到应用根目录,直接安装npm包
npm install express-partials
方法二,打开应用的package.json文件,找到dependencies元素,添加如下一行代码:
"express-partials": "*",进入到应用根目录npm install,即可
本人在这里推荐第二个方法,因为你部署的时候本就依赖则合格包。
第二步:
代码中引用中间件
var express = require('express'),
params = require('express-params'),
partials = require('express-partials');
var app = express();
app.use(partials()); //这个一定要写在app.use(app.router)之前
params.extend(app);
params = require('express-params'),
partials = require('express-partials');
var app = express();
app.use(partials()); //这个一定要写在app.use(app.router)之前
params.extend(app);
第三步:
使用layout,默认使用views/layout.xxx,当然仍然可以在路由的render方法参数中指定其他layout或设置layout: false(但express 3中已不支持全局view options设置的layout参数)
views/layout.ejs
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title><%= title%></title>
- <link rel="stylesheet" href="/stylesheets/style.css" />
- </head>
- <body>
- <%- body%>
- </body>
- </html>
views/index.ejs
- <h1><%= title%></h1>
- <p>Welcome to <%= title%></p>
- <ul>
- <li><a href="/Users" title="User Manage">User Manage</a></li>
- </ul>
第四步:
使用partial,express之前版本使用partial时是以当前视图起始查找相对位置下的视图,而目前版本的express-partials中间件似乎只支持直接保存于views目录下的partial,例如下面的例子,之前匹配到的应该是views/users/***.ejs,而现在则需要将partial页面移动到views/***.ejs,否则报错
views/users/index.ejs
- <h1><%= title%></h1>
- <table style="border: 1px solid Black" border="1">
- <tr style=" color: rgb(0, 0, 204);">>
- <th></th>
- <th>ID</th>
- <th>Name</th>
- <th>***</th>
- </tr>
- <% users.forEach(function(item, i){ %>
- <tr>
- <td><%= i+1 %></td>
- <td><a href="/Users/<%= item.id%>" title="View user"><%= item.id%></a></td>
- <td><%= item.name%></td>
- <td><%- partial('***', {***:item.***}) %></td>
- </tr>
- <% }) %>
- </table>
- <br />
- <a href="/">Back</a>
views/***.ejs
- <%
- var fun*** = function(s){
- switch(s)
- {
- case 1: return 'Male';
- case 2: return 'Female';
- default: return 'Unknow';
- }
- };
- %>
- <%= fun***(***)%>