这个node.js胡子部分功能是理想的吗?

时间:2013-05-23 14:10:42

标签: node.js express partial-views mustache

我是节点的新手,并且一直在尝试找到一种方法来集成胡子,这种方式可以灵活地构建模板。在尝试了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);

});
.
.
.
.

这对我来说比我见过的其他例子更有意义,而且它适用于小胡子。我能够为用户提供自定义控件,以确定他们希望模块的位置。所以我的问题是

有更有效的方法吗?

我这样做的方式有什么不妥吗?

绕过快速渲染功能我错过了什么?

为什么我要使用像合并这样的库来添加另一层来表达?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你不想表达渲染,我的书中很好,我甚至在我的一些实验室项目中删除了整个模块,只是为了更好地理解节点中的路由。 但是我真的建议不要使用readFileSync,因为它是一个阻塞方法,会使concurency成为问题,总是使用readFile,所以你得到异步回调。