2013-02-25 90 views
1

我正在学习节点,并从最简单的表达和使用res.render('view',{data:data})呈现视图时,它只是一个模板引擎,如玉,适合视图。我可以不使用正常的HTML吗?我只需要使用快速渲染的模板语言?

+0

这取决于视图引擎。 Jade允许使用[文字HTML](https://github.com/visionmedia/jade#a6-10)。虽然,如果你的意思是*只是* HTML,那么[更好的选择](http://www.senchalabs.org/connect/static.html)。而且,如果您的意思是“*主要是HTML *” - 例如'

{{key}}
'或'
<%= key %>
',那么[其他模板引擎](https://github.com/visionmedia/consolidate.js#supported-template引擎)你可以选择。 – 2013-02-25 08:11:51

+0

你总是可以'res.write()'HTML。 – 2013-02-25 08:49:30

回答

1

你可以,但这是我在学习Node时碰到的一个问题。如果您不想使用模板引擎,则仍然可以让Node以静态方式吐出HTML文件的内容。例如(非常基本的EXAMLE):

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

有关节点的伟大的事情是,它迫使你从逻辑模板分离(到一定程度,可以挤大量的逻辑为模板反正)。

我不喜欢Jade并使用EJS,直到事实证明客户端EJS与服务器端不同,并且您无法真正在浏览器中重新使用模板(正如您在某些时候肯定希望的那样,你开始在浏览器中渲染页面)。您可以重新使用简单的EJS模板,但不能重复使用带有部分的模板(因为大部分模板都是)。

经过大量的搜索和反复试验,我最终使用了非常快速(实际上速度最快)的doT模板,轻量级(只有140行JavaScript)可以轻松地集成到Express(按照合并模式 - 你不能直接与doT合并),可以在浏览器中使用(加载部分的函数必须不同,但它很容易)。

doT似乎有我在其他模板引擎中没有看到的功能,它有一个非常优雅的语法,它最接近handlebars(我的最爱),但仍然允许正常的JavaScript内部(这就是为什么我在第一个选择EJS地点)。