将variables传递给Jade而不使用Express

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

  • 在不使用express.js时,如何将node.jsvariables传递给.jade模板?

我正在尝试制作一个不使用快递的小型网站,以便我能够理解一切如何运作。

另外,是否有教程或文章关于使用Jade和node.js没有expression?

 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} 

瓦迪姆的回答很好,但很老。 它使用不同的语法来声明Jadevariables,然后在Jade 官方教程中使用 。 此外,它不显示如何使用Jade选项 。

简单的例子

index.jade

 doctype html html head title= pageTitle body h1= greetings 

在这个例子中,variables是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没有漂亮的打印。 这不是一个问题,但玉有一个选项,输出相当印刷的HTML。 你可以在这里看到完整的选项列表。

翡翠的官方教程并没有教你如何在模板中使用选项。 翡翠的GitHub页面试图教,但不完整。 它用:

 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>