我是节点的初学者,只是尝试使用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.');
但事实并非如此,有人可以向我解释我做错了什么吗?非常感谢!
答案 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!");