我只需要使用带有快速渲染的模板语言吗?

时间:2013-02-25 07:16:03

标签: node.js express

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

2 个答案:

答案 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 )。