0

我是节点的初学者,只是尝试使用 Jade 模板引擎,我在 github 页面上阅读了自述文件,最终我认为这应该可以工作:

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.');

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

4

2 回答 2

2

Jade 需要适当的换行符才能工作。并且正确的换行符在 inline 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.');
于 2013-04-02T03:53:18.990 回答
0

这行代码:

fn;

……不打电话fn。它检索变量中的值fn,然后丢弃它,而不用它做任何事情。相反,您想调用它,然后使用它的返回值作为参数res.end

res.end(fn());

此外,html p hello不做你认为它做的事:它认为你想要一个标签,html,其中包含文本p hello。那不是你想要的。您需要使用换行符和正确的缩进,然后它会起作用:

html
    p hello

顺便说一句,如果你要使用 Jade,你可能不想有那些无关紧要的东西

res.write("Hello World!");
于 2013-04-02T03:43:08.890 回答