将变量传递给没有Express的Jade

时间:2012-09-07 16:53:43

标签: node.js express pug

关于Jade模板引擎的快速提问:

  • 如果您不使用node.js,如何将.jade个变量传递到express.js模板?

我正在努力建立一个不使用快递的小网站,以便我能理解一切是如何运作的。

此外,是否有关于使用Jade和node.js没有表达的教程或文章?

2 个答案:

答案 0 :(得分:10)

var jade = require('jade');
jade.renderFile('tpl.jade', { hello: 'world' }, function(err, html) {
        console.log(err);
        console.log(html);
});

<强> tpl.jade:

html
  body
    h1 #{hello}

答案 1 :(得分:1)

Vadim答案很好,但很老。它使用不同的语法来声明Jade变量,然后使用当前在Jade official tutorial中使用的变量。此外,它没有显示如何使用Jade options

简单示例

<强> index.jade

doctype html
html
  head
    title= pageTitle
  body
    h1= greetings

在此示例中,变量为 pageTitle 问候语

<强> app.js

var jade = require('jade');

var locals = {
  pageTitle : 'My Page',
  greetings : 'Hello World!'
};

jade.renderFile('index.jade', locals, function(err, html) {
  console.log(html);
});

<强>输出:

<!DOCTYPE html><html><head><title>My Page</title></head><body><h1>Hello World!</h1></body></html>


使用Jade选项

上一个示例输出的HTML没有漂亮的打印。这不是问题,但Jade有一个选项可以输出漂亮的HTML。您可以看到完整的选项列表here

当您的模板中还包含变量时,Jade&#39; official tutorial并未教授如何使用选项。 Jade的GitHub page试图教导,但不完整。它使用:

jade.renderFile('filename.jade', merge(options, locals));

由于merge是一个未定义的函数,您必须定义它。此函数将合并两个JSON对象。

<强> app.js

var jade = require('jade');

function merge(obj1, obj2) {
  var result = {};

  for(var key in obj1) 
    result[key] = obj1[key];

  for(var key in obj2) 
    result[key] = obj2[key];

  return result;
}

var options = {
  pretty : true
};

var locals = {
  pageTitle : 'My Page',
  greetings : 'Hello World!'
};

jade.renderFile('index.jade', merge(options, locals), function(err, html) {    
  console.log(html);
});

<强>输出:

<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>