У меня есть логика вида в моем файле шаблона jade. Как я могу передать модель в jade и получить html для дальнейшей отправки по электронной почте?
Как скомпилировать файл шаблона jade для получения строки?
Ответ 1
Вы можете попробовать следующее:
var jade = require('jade'),
fs = require('fs');
fs.readFile('template.jade', 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
var fn = jade.compile(data);
var html = fn({name:'Oleg'});
console.log(html);
});
Где template.jade
- путь к вашему шаблону. И это выглядит так:
!!!
html
head
title= 'Hello world'
body
p Hello #{name}!
Итак, вы передаете свою модель в качестве входа функции fn(), а ее результатом будет html.
<!DOCTYPE html><html><head><title>Hello world</title></head><body><p>Hello Oleg!</p></body></html>
Ответ 2
Также вы можете поймать строку из обратного вызова render (экспресс-пример)
exports.test1 = function(req, res){
res.render('test1', { title: 'test1' }, function(err, body) {
console.log(body);
});
res.send('wooo');
};
test1.jade
div
= title
p hello world!
Ответ 3
Открытие шаблона с помощью fs.readFile()
больше не требуется. API Jade включает в себя метод compileFile()
, который компилируется непосредственно из файла.
var jade = require("jade");
var locals = {name: "Linus"},
render = jade.compileFile('template.jade'),
html = render(locals);
Jade API также включает метод renderFile()
, который напрямую возвращает строку html из заданного файла, что делает его еще проще.
var jade = require("jade");
var locals = {name: "Linus"},
html = jade.renderFile('template.jade', locals);
Ответ 4
Ответы все работают для загрузки шаблона нефрита и компиляции его в HTML с использованием локальных. Однако, если вы отправляете электронные письма HTML, вам нужно знать, что большинство клиентов выделяют все классы CSS. Используйте Juice (или что-то в этом роде), чтобы применить все классы CSS в строке.