1

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

4

2 回答 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 回答