如何编译Jade模板文件以获得字符串?

15

我在Jade模板文件中有一个视图逻辑。如何将模型传递到Jade并获取HTML以便通过电子邮件进一步发送?

4个回答

26

您可以尝试以下方法:

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>

你可以使用app.render将模板渲染为字符串,正如这个最新的回答中所提到的。 - Dan Ross

13

同时,您还可以从渲染回调中捕获字符串(express示例)。

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!

6

现在不再需要使用fs.readFile()来打开模板了。Jade API包括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);

1
正确。这里有一个相关的问题,关于如何检查错误:https://dev59.com/Kmw05IYBdhLWcg3wXQsg#34709515 - Wtower
这是哪个Jade版本?我的renderFile(v1.2.0)需要3个参数。 - akcasoy
@akcasoy 这是最新文档:http://jade-lang.com/api/。 renderFile()描述在底部显示需要2个参数。 - Nocturno

1

这些答案都适用于加载jade模板并使用本地变量将其编译为HTML。但是,如果您要发送HTML电子邮件,则需要注意大多数客户端会剥离所有CSS类。使用Juice(或类似内容)将所有CSS类应用为内联样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接