我是节点的新手,并且一直在尝试找到一种方法来集成胡子,这种方式可以灵活地构建模板。在尝试了hogan,胡子表达和小胡子的其他排列后,我发现以下内容对我有意义。
我不确定是否有更有效的方法来处理这个问题。基本上我喜欢控制部分模板,所以我可以将它们加载到主模板上的模块位置。所以这是基本设置
我有3个部分模板和一个包装器/主模板,以下值仅作为示例。
./视图/ wrapper.tpl
<html>
<title>{{ title }}</title>
<body>
<h1>{{ heading }}</h1>
<div>{{> position_1 }}</div>
<div>{{> position_2 }}</div>
<div>{{> position_3 }}</div>
</body>
</html>
./视图/ module_1.tpl
<h2>{{module_1.title}}</h2>
<p>{{module_1.body}}</p>
./视图/ module_2.tpl
<h2>{{module_2.title}}</h2>
<p>{{module_2.body}}</p>
./视图/ module_3.tpl
<h2>{{module_3.title}}</h2>
<p>{{module_3.body}}</p>
我使用Express但删除了默认的jade渲染引擎。我只包含了需要添加到默认快速安装的代码。 需要胡子和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);
});
.
.
.
.
这对我来说比我见过的其他例子更有意义,而且它适用于小胡子。我能够为用户提供自定义控件,以确定他们希望模块的位置。所以我的问题是
有更有效的方法吗?
我这样做的方式有什么不妥吗?
绕过快速渲染功能我错过了什么?
为什么我要使用像合并这样的库来添加另一层来表达?
谢谢!
答案 0 :(得分:1)
如果你不想表达渲染,我的书中很好,我甚至在我的一些实验室项目中删除了整个模块,只是为了更好地理解节点中的路由。 但是我真的建议不要使用readFileSync,因为它是一个阻塞方法,会使concurency成为问题,总是使用readFile,所以你得到异步回调。