Как скомпилировать файл шаблона jade для получения строки? - программирование
Подтвердить что ты не робот

Как скомпилировать файл шаблона jade для получения строки?

У меня есть логика вида в моем файле шаблона jade. Как я могу передать модель в jade и получить html для дальнейшей отправки по электронной почте?

4b9b3361

Ответ 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 в строке.