我从最简单的学习节点和表达,当使用它渲染视图时res.render('view',{data:data})
,它只是一个适合视图的模板引擎,如玉。我可以不使用普通的html吗?
问问题
120 次
2 回答
1
可以,但这是我在学习 Node.js 时遇到的问题。如果您不想使用模板引擎,您仍然可以让 Node 以静态方式吐出 HTML 文件的内容。例如(非常基本的例子):
var base = '/path/to/your/public_html',
fs = require('fs'),
http = require('http'),
sys = requrie('sys');
http.createServer(function (req,res) {
path = base + req.url;
console.log(path);
path.exists(path, function(exists) {
if(!exists) {
res.writeHead(404);
res.write('Bad request: 404\n');
res.end();
} else {
res.setHeader('Content-Type','text/html');
res.statusCode = 200;
var file = fs.createReadStream(path);
file.on("open",function() {
file.pipe(res);
});
file.on("error",function(err) {
console.log(err);
});
}
});
}).listen(80);
console.log('server on tcp/80');
于 2013-02-25T07:29:16.350 回答
0
Node 的伟大之处在于它迫使您将模板与逻辑分开(在一定程度上,您无论如何都可以将大量逻辑压缩到模板中)。
我不喜欢 Jade 并使用 EJS,直到发现客户端 EJS 与服务器端不同,并且您无法真正在浏览器中重用模板(当您开始渲染页面时,您在某些时候肯定会想要)在浏览器中)。您可以重复使用简单的 EJS 模板,但不能重复使用带有部分的模板(因为您的大多数模板都是如此)。
经过大量搜索和反复试验,我最终使用了非常快(实际上是最快的)、轻量级(只有 140 行 JavaScript)、可以轻松集成到 Express 中的 doT 模板(通过以下consolidate 的模式——你还不能直接用 doT 使用 consolidate),可以在浏览器中使用(加载部分的功能必须不同,但又很容易)。
doT 似乎具有我在其他模板引擎中没有看到的功能,具有非常优雅的语法,最接近把手(我最喜欢的),但仍然允许内部使用普通的 JavaScript(这就是我首先选择 EJS 的原因)。
于 2013-02-26T21:32:02.147 回答