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

我正试图让板模板引擎与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不会返回任何(未定义),但将数据传递给callback。 我不知道如何使它在这种情况下工作,因为Express期望编译函数返回一个函数,直接返回一个渲染的模板被调用时。

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

 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()函数直接返回呈现的string,如下所示:

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

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

相关文件:

板的github文档

express.js app.register文档

我问这个问题之后,盘子的创build者立刻给这个项目添加了一个补丁,使其与快速兼容。 plate@0.0.13+有变化,你可以在这里看到实现细节