谢谢!
答案 0 :(得分:3)
想象一下,您有一个应用程序计算服务器端的某些值,例如聊天中的房间列表。
然后你有2个合理的解决方案:
模板系统对第二种解决方案很有用。
要生成此HTML,而不是让nodejs程序连接HTML片段,模板引擎是一个很好的解决方案。
服务器的JS部分将生成数据(这里使用express和从关系数据库中获取数据):
app.get('/rooms', ensureAuthenticated, ensureCompleteProfile, function(req, res){
db.on(req.user.id)
.then(function(uid){
return [
this.listAccessibleRooms(uid),
this.fetchUserPingRooms(uid, 0)
]
}).spread(function(accessibleRooms, pings){
var rooms = {public:[], private:[]};
accessibleRooms.forEach(function(r) {
r.path = roomPath(r);
rooms[r.private?'private':'public'].push(r);
});
res.render('rooms.jade', { rooms:rooms, pings:pings });
}).finally(db.off);
});
并且Jade文件将使用它们:
table.list
each room, i in rooms.public
tr
th: a(href=room.path) #{room.name}
td.rendered #{room.description}
if room.auth
td.role= room.auth
生成这种HTML:
<table class="list">
<tr>
<th><a href="path1">Room 1</a></th>
<td class="rendered">Description of room 1</td>
<td class="role">Admin</td>
</tr>
<tr>
<th><a href="path2">Room 2</a></th>
<td class="rendered">Description of room 2</td>
</tr>
</table>
这分散了管理数据和显示数据的问题。它的优势还在于与HTML没有太大区别,在我看来,当目标是生成HTML时,HTML就是好的。
此示例取自my open source Miaou chat。完整的Jade文件是rooms.jade。
答案 1 :(得分:0)
也可以使用模板引擎
服务器端MVC框架
非常像Denys提供的Express示例
例如:ASP.NET MVC's Razor,Laravel's Blade,...
静态网站生成器
从动态内容(json,db,...)生成静态站点。如果您不能使用服务器端语言或不想支付费用,则非常有用
例如:Jekyll's Liquid,...
发票应用
模板引擎创建html,然后转换为pdf。或者生成pdfs的任何其他应用程序。