我正在学习节点并从最简单的表达,当使用res.render('view',{data:data})
渲染视图时,它只是一个适合视图的模板引擎,如玉。我可以不使用普通的HTML吗?
答案 0 :(得分:1)
你可以,但这是我在学习Node时遇到的一个问题。如果您不想使用模板引擎,您仍然可以让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');
答案 1 :(得分:0)
Node的优点在于它强迫你将模板与逻辑分开(到某个级别,你可以将很多逻辑压缩到模板中)。
我不喜欢Jade并使用EJS,直到客户端EJS与服务器端不同,你无法在浏览器中重复使用模板(正如你在某些时候肯定想要的那样,当你开始在浏览器中渲染页面)。您可以重复使用简单的EJS模板,但不能重复使用带有局部模板的模板(因为大多数模板都是这样)。
经过大量的搜索和反复试验,我最终使用了非常快的doT模板(实际上是最快的),轻量级(只有140行JavaScript),可以很容易地集成到Express中(通过遵循整合模式 - 你不能直接使用doT整合),可以在浏览器中使用(加载部分的功能必须不同,但很容易再次)。
doT似乎具有我在其他模板引擎中没有看到的功能,具有非常优雅的语法,最接近车把(我最喜欢的)但仍允许内部普通JavaScript(这就是为什么我首先选择了EJS )。