我是 node 新手,一直在尝试找到一种方法来集成 mustache,这种方法可以灵活地构建模板。在尝试了 hogan、mustache-express 和其他小胡子排列之后,我发现以下内容对我来说很有意义。
我不确定是否有更有效的方法来处理这个问题。基本上我喜欢控制部分模板,这样我就可以将它们加载到主模板上的模块位置。所以这是基本设置
我有 3 个部分模板和一个包装器/主模板,以下值仅作为示例。
./views/wrapper.tpl
<html>
<title>{{ title }}</title>
<body>
<h1>{{ heading }}</h1>
<div>{{> position_1 }}</div>
<div>{{> position_2 }}</div>
<div>{{> position_3 }}</div>
</body>
</html>
./views/module_1.tpl
<h2>{{module_1.title}}</h2>
<p>{{module_1.body}}</p>
./views/module_2.tpl
<h2>{{module_2.title}}</h2>
<p>{{module_2.body}}</p>
./views/module_3.tpl
<h2>{{module_3.title}}</h2>
<p>{{module_3.body}}</p>
我使用 Express 但删除了默认的翡翠渲染引擎。我只包含了需要添加到默认快速安装的代码。需要小胡子和fs
.
.
.
var mustache = require('mustache');
var fs = require('fs');
.
.
.
app.get('/', function(req, res){
// grab master template
var wrapper = fs.readFileSync('./views/wrapper.tpl', "utf8");
// load data that will be used in template & partials
var data = {
'title': 'dashboard',
'heading': 'welcome to your dashboard',
'module_1':{
'title': 'module 1 title',
'body': 'module 1 body'},
'module_2':{
'title': 'module 2 title',
'body': 'module 2 body'},
'module_3':{
'title': 'module 3 title',
'body': 'module 3 body'}};
// load partial templates
var partials = {'position_1': fs.readFileSync('./views/module_1.tpl', "utf8"),
'position_2': fs.readFileSync('./views/module_2.tpl', "utf8"),
'position_3': fs.readFileSync('./views/module_3.tpl', "utf8")}
// include partials and then replace variables with given data
var html = mustache.to_html(wrapper, data, partials);
// send output to browser
res.send(html);
});
.
.
.
.
这对我来说比我见过的其他例子更有意义,而且它适用于小胡子。我能够让用户自定义控制他们希望模块放置在哪里。所以我的问题是
有没有更有效的方法来做到这一点?
我做这件事的方式有什么问题吗?
通过绕过快速渲染功能,我错过了什么?
为什么要使用 consolidate 之类的库并添加另一个层来表达?
谢谢!