翡翠テンプレートファイルにビューロジックがあります。モデルを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>
また、レンダーコールバックから文字列をキャッチすることもできます(エクスプレスの例)
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);
_
Jade APIには、指定されたファイルからhtml文字列を直接返すrenderFile()
メソッドも含まれているため、さらに簡単になります。
_var jade = require("jade");
var locals = {name: "Linus"},
html = jade.renderFile('template.jade', locals);
_
答えはすべて、jadeテンプレートをロードし、ローカルを使用してHTMLにコンパイルするために機能します。ただし、HTMLメールを送信する場合は、ほとんどのクライアントがすべてのCSSクラスを削除することに注意する必要があります。 Juice (またはそのようなもの)を使用して、すべてのCSSクラスをインラインで適用します。