我在Jade模板文件中有一个视图逻辑。如何将模型传递到Jade并获取HTML以便通过电子邮件进一步发送?
您可以尝试以下方法:
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>
同时,您还可以从渲染回调中捕获字符串(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!
现在不再需要使用fs.readFile()
来打开模板了。Jade API包括compileFile()
方法,可以直接从文件编译。
var jade = require("jade");
var locals = {name: "Linus"},
render = jade.compileFile('template.jade'),
html = render(locals);
renderFile()
方法,可直接从给定文件返回 html 字符串,使得操作更加简单。var jade = require("jade");
var locals = {name: "Linus"},
html = jade.renderFile('template.jade', locals);
renderFile()
描述在底部显示需要2个参数。 - Nocturno这些答案都适用于加载jade模板并使用本地变量将其编译为HTML。但是,如果您要发送HTML电子邮件,则需要注意大多数客户端会剥离所有CSS类。使用Juice(或类似内容)将所有CSS类应用为内联样式。