Express.js自定义模板引擎(板)

时间:2012-01-16 21:42:29

标签: javascript node.js express template-engine

我正在努力让平板模板引擎与express.js一起使用。我最初的尝试是:

app.register('.html', {
    compile: function (str, options) {
        var template = new plate.Template(str);
        return function(locals) {
            return template.render(locals, function(err, data) {
                return data;
            });
        }
    }
});

我看到问题是template.render没有返回任何内容(未定义),而是将数据传递给回调。我不确定如何使它在这种情况下工作,因为Express期望compile函数返回一个函数,该函数在被调用时直接返回渲染模板。

我想也许我可以使用promises来解决这个问题,但是因为快递代码不希望返回承诺,所以也没有成功。我不太愿意加速承诺,所以我可能只是做错了:

app.register('.html', {
    compile: function (str, options) {
        var promise = new Promise();
        var template = new plate.Template(str);
        return function(locals) {
            template.render(locals, function(err, data) {
                promise.resolve(data);
            });
            return promise;
        }
    }
});

以下是可行的自定义实现示例。区别在于下划线模板template()函数直接返回渲染的字符串,如下所示:

app.register('.html', {
    compile: function (str, options) {
        var template = _.template(str);
        return function (locals) {
            return template(locals);
        };
    }
});

我真的很喜欢使用Plate模板,因为{%block%}标签太棒了。任何帮助表示赞赏。

相关文件:

plate's github docs

express.js app.register docs

1 个答案:

答案 0 :(得分:5)

在我问这个问题后,盘子的创建者立即在项目中添加了一个补丁,使其与express兼容。 plate@0.0.13+有更改,您可以看到实施细节here