web-dev-qa-db-ja.com

文字列を取得するためにjadeテンプレートファイルをコンパイルする方法は?

翡翠テンプレートファイルにビューロジックがあります。モデルをjadeに渡し、htmlを取得してさらに電子メールで送信するにはどうすればよいですか?

15
Oleg Dats

次のことを試すことができます。

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>
26
xavier.seignard

また、レンダーコールバックから文字列をキャッチすることもできます(エクスプレスの例)

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!
13
Ilya Rogojin

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);
_
6
Nocturno

答えはすべて、jadeテンプレートをロードし、ローカルを使用してHTMLにコンパイルするために機能します。ただし、HTMLメールを送信する場合は、ほとんどのクライアントがすべてのCSSクラスを削除することに注意する必要があります。 Juice (またはそのようなもの)を使用して、すべてのCSSクラスをインラインで適用します。

1
cade