试图了解如何将Jade与Node.js一起使用

时间:2013-04-02 03:39:17

标签: javascript node.js pug

我是节点的初学者,只是尝试使用Jade模板引擎,我在github页面上阅读了ReadMe,最后我认为这应该有效:

var http = require('http'),
    jade = require('jade'),
 fn = jade.compile('html p hello');

function onRequest(req, res) {
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write('Hello World!');

    fn;


    res.end();
}

http.createServer(onRequest).listen(8888);
console.log('Server started.');

但事实并非如此,有人可以向我解释我做错了什么吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

Jade需要适当的换行才能奏效。内联javascript中正确的换行符很难看。 (另外,使用Jade进行模板化的好处是关注点的分离,例如代码中没有视图逻辑)。

最简单的方法是将模板隔离在文件中:

<强> tpl.jade

doctype 5
html
  body
    p hello

<强> index.js

var http = require('http')
  , jade = require('jade')
  , path = __dirname + '/tpl.jade'
  , str = require('fs').readFileSync(path, 'utf8')
  , fn = jade.compile(str, { filename: path, pretty: true });

function onRequest(req, res) {
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write(fn());
    res.end();
}

http.createServer(onRequest).listen(8888);
console.log('Server started.');

答案 1 :(得分:0)

这行代码:

fn;

...不会致电fn。它检索变量fn中的值,然后将其丢弃,而不对其执行任何操作。相反,您想要调用它,然后将其返回值用作res.end的参数:

res.end(fn());

此外,html p hello不符合您的想法:它认为您需要一个标记html,其中包含文字p hello。那不是你想要的。您需要使用换行符并更正缩进,然后它才能正常工作:

html
    p hello

顺便说一下,如果你打算使用Jade,你可能想要没有那么无关的

res.write("Hello World!");