3

我正在尝试在 express.js 中加载 Mustache 部分,但显然我遇到了一些麻烦。是否可以采用这样的 EJS 方法,其中包含视图部分文件:

Node.js - EJS - 包括部分

我有一个名为index.html的模板文件

<html>
    <head>
        <title>My Title</title>
    </head>
    <body>
        {{>header}}
    </body>
</html>

header.mustache

<div class="header">
    <div style="display: table-cell;padding-left: 10px;padding-top: 8px;vertical-align: middle;">
        <img src="images/logo.png">
    </div>
</div>

在 express.js 中,我的渲染函数是这样的:

app.get('/', function(req, res) {
    res.render('signup.html', {
        partials: {
            header: partial('header.mustache')   //this line is wrong        
        }
    });
});

我是这方面的新手,但想以某种方式将 header.mustache 的全部内容呈现或读取到 header 对象。这可能吗?

4

1 回答 1

1

查看以下链接,它可能会解释如何使用 express.js 设置 mustache

在 Express 中使用 Mustache 模板

现在为了能够从外部文件加载部分修改 tmpl.compile 到以下

compile : function(source, options) {
    var views = options.views || './views';
    var extension = options.extension || '.html';

    if (typeof source == 'string') {
        return function(options) {
            options.locals = options.locals || {};
            options.partials = options.partials || {};

            if (options.body) // for express.js > v1.0
                locals.body = options.body;

            for(var p in options.partials) {
                var partialFileName = views + '/' + options.partials[p] + extension;

                if(path.existsSync(partialFileName)) {
                    options.partials[p] = fs.readFileSync(partialFileName, "utf-8");
                }
            }               
            return mustache.to_html(source, options.locals, options.partials);
        };
    } else {
        return source;
    }
}

您还需要添加以下 2 个要求语句

var fs = require("fs"),
var path = require("path");

此更改假定您的部分位于views目录中并以扩展名结尾.html(因此,例如,您可能希望将部分的扩展名更改为 .html 或相应地调整上述代码)

现在您可以使用以下进行部分渲染

app.get('/', function(req, res) {
    res.render('signup.html', {
        partials: {
            header: 'header'   //this now works :)
        }
    });
});
于 2012-05-25T16:46:39.550 回答