关于 Jade 模板引擎的快速问题:
- 不使用时如何将
node.js
变量传递给.jade
模板express.js
?
我正在尝试制作一个不使用 express 的小型网站,以便我可以了解一切是如何运作的。
还有,有没有关于Jade的使用教程或者文章,node.js
没有express?
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}
Vadim的回答很好,但很旧。它使用与 Jade官方教程中当前使用的语法不同的语法来声明 Jade 变量。此外,它没有显示如何使用Jade options。
索引.jade
doctype html
html
head
title= pageTitle
body
h1= greetings
在这个例子中,变量是pageTitle和greetings。
应用程序.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>