0

我是 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 之类的库并添加另一个层来表达?

谢谢!

4

1 回答 1

1

如果您不想要快速渲染,这在我的书中很好,我什至在我的一些实验室项目中删除了整个模块,只是为了更好地理解 node.js 中的路由。但是,我真的建议不要使用 readFileSync,因为它是一种阻塞方法并且会使并发性成为问题,请始终使用 readFile 以便获得异步回调。

于 2013-07-28T19:18:01.933 回答