5

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

  • 不使用时如何将node.js变量传递给.jade模板express.js

我正在尝试制作一个不使用 express 的小型网站,以便我可以了解一切是如何运作的。

还有,有没有关于Jade的使用教程或者文章,node.js没有express?

4

2 回答 2

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}
于 2012-09-07T17:02:50.973 回答
1

Vadim的回答很好,但很旧。它使用与 Jade官方教程中当前使用的语法不同的语法来声明 Jade 变量。此外,它没有显示如何使用Jade options

简单示例

索引.jade

doctype html
html
  head
    title= pageTitle
  body
    h1= greetings

在这个例子中,变量是pageTitlegreetings

应用程序.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>


使用翡翠选项

前面的示例输出的 HTML 没有漂亮的打印。这不是问题,但 Jade 有一个选项可以输出漂亮的打印 HTML。您可以在此处查看完整的选项列表。

Jade 的官方教程不会教您在模板中还有变量时如何使用选项。Jade 的GitHub 页面尝试进行教学,但不完整。它用:

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

作为merge一个未定义的函数,你必须定义它。此函数将合并两个 JSON 对象。

应用程序.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>
于 2015-11-21T21:53:04.923 回答