没有模板引擎的Node.js

问题描述 投票:0回答:5

我是 Node.js 新手,正在尝试学习。据我了解,使用模板引擎(例如 Jade)是很常见的,甚至对于 CSS(例如 Stylus)也是如此。老实说,我见过的所有教程在布局方面都涉及模板引擎。

问题是我不想使用模板引擎,因为我认为它不必要地复杂。

Here 是 Node 样板的链接(不幸的是,由于某种原因它不起作用),但选项 1 不应使用任何模板引擎进行布局。

那么,将 Node.js 和 Mongodb 与“普通”HTML(5)结合起来的最简单方法是什么?例如,是否可以将 HMTL5 Boilerplate 与 Node 一起使用?

node.js mongodb express template-engine
5个回答
9
投票

如果您使用静态 html,那么您不需要在服务器端使用模板。 您可以使用 Express/Connect 静态中间件轻松提供 html 文件,例如:

app.use(express.static(__dirname + '/public'));

然后将

index.html
放入您的公共文件夹。

另外,我认为您可以将整个 h5bp 复制并粘贴到您的公共文件夹中,它应该可以工作。


4
投票

这是我对此的想法。

如果您仅提供 static html,那么显然您不需要任何模板引擎,因为您可以在响应中缓冲 html,或者使用 Connect 静态中间件。

然而,当您必须处理动态内容时,事情会变得有趣。

这就是模板引擎擅长的地方,因为它们提供了将数据与 html 集成的方法。如果要替换模板引擎,则需要一个可以执行 HTML 和 DOM 操作的库。我可以想到两种选择:

  • jsdom 以及基于其构建的库(例如 fill.js)。
    通过 jsdom,您可以使用服务器端 jQuery 来构建视图,甚至是 YUI
    但它有一些缺点:
    • 又慢又麻烦
    • 在 Windows 上安装很痛苦,因为它依赖于本机模块
    • 我无法让它解析 html 片段或不完整的 html(也许有人知道解决这个问题的方法)

  • 第二种选择是使用一些处理 html 的轻量级库,而不需要完整的 DOM。到目前为止,我发现了两个擅长于此的库:
    • cheerio - 一个依赖于类似 jQuery 选择器的小型库
    • plates - 将数据绑定到标记的库

在我看来,两者都非常简洁,并且是摆脱模板的良好起点:)
可能还有其他我不知道的,但你明白了。


3
投票

使用express,您只需在响应中发送html5:

app.get('/', function(req, res){
  res.send('<header>Hello World</header>');
});

但是,我想说,在大多数情况下,模板引擎不会增加复杂性。如果您渲染动态内容,关注点分离会让事情变得更简单。


2
投票

第一次回答我自己的问题。我只是想分享我找到了一个从 html 到 jade(模板引擎)的转换器。这绝对是一件好事,至少对我来说消除了很多复杂性,即使它仍然涉及模板引擎。

http://html2jade.aaron-powell.com/


0
投票

正如已接受的答案所指出的那样,但这里有更详细的信息。有一种更简单的方法可以在没有模板引擎的情况下创建视图。最基本的方法是在 Express 应用程序中使用 ES6 的 templateliteral

res.send()
方法。这样,您可以根据用例注入静态模板或动态模板。

静态模板

app.get('/', (req, res, next) => {
  const template = `
   <div>Hello World</div>
  `;
  res.send(template);
});

动态模板

从字面上看,使用模板文字和不同的路由,您可以根据页面的独特需求动态创建模板注入和样式来创建默认模板。您还可以模块化您的应用程序以实现代码可重用性。

欲了解更多信息,请访问: 源代码 | 演示

PS:通过这种方式,您的应用程序所需的依赖项会减少[上面的 POC 只有 2 个依赖项,即:Nodemon 和 Express],从而降低了破坏性更改的风险,并让应用程序经过了时间的考验。不需要 EJS 或任何其他模板引擎,不需要公共文件夹,并且技术上不需要 HTML5 和 CSS 文件。这就是 JavaScript 的美妙之处。

© www.soinside.com 2019 - 2024. All rights reserved.