【问题标题】:How to compile jade template file to get string?如何编译jade模板文件来获取字符串?
【发布时间】:2012-11-13 14:21:26
【问题描述】:

我的翡翠模板文件中有一个视图逻辑。如何将模型传递给玉并获取 html 以进一步通过电子邮件发送?

【问题讨论】:

    标签: node.js pug


    【解决方案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>
    

    【讨论】:

    • 您可以使用app.render 将模板呈现为字符串,如this 更新的答案中所述。
    【解决方案2】:

    您还可以从渲染回调中捕获字符串(快速示例)

    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() 打开模板。 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);
      

      【讨论】:

      • 正确。以下是有关如何检查错误的相关问题:stackoverflow.com/questions/7283896/…
      • 那是哪个翡翠版本?我的 renderFile (v1.2.0) 需要 3 个参数
      • @akcasoy 这些是最新的文档:jade-lang.com/apirenderFile() 描述位于最底部,显示需要 2 个参数。
      【解决方案4】:

      答案都适用于加载翡翠模板并使用本地将其编译为 HTML。但是,如果您发送 HTML 电子邮件,则需要注意大多数客户端会删除所有 CSS 类。使用 Juice(或类似的东西)内联应用所有 CSS 类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多