Я пытаюсь заставить движок шаблонов плит работать с 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 ожидает, что функция компиляции возвратит функцию, которая непосредственно возвращает обработанный шаблон при вызове.
Я подумал, что, возможно, я смогу использовать обещания для решения этой проблемы, но там тоже не удалось, поскольку экспресс-код не ожидает возврата обещания. Я не слишком разбираюсь в обещаниях, поэтому я могу просто ошибиться:
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%} такой классный. Любая помощь приветствуется.
соответствующая документация:
Документы Github для планшетов
express.js app.register docs