我正在尝试使板模板引擎与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函数返回一个函数,该函数在调用时直接返回渲染的模板。
我当时在想,也许我可以使用promise来解决这个问题,但是由于表达代码不希望返回promise,所以那里也没有成功。我并没有很快兑现 promise ,所以我可能做错了:
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
最佳答案
在我询问之后,plate的创建者立即为该项目添加了补丁,以使其与express兼容。 [email protected]+进行了更改,您可以看到实现细节here
关于javascript - Express.js定制模板引擎(板),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8886678/