Nodejs中Logicless template对应什么样的应用场景?

Nodejs中Logicless template对应什么样的应用场景?

今天搜索一堆模板的时候注意到还有这个术语, 就搜了下: The Case Against Logic-less Templates What’s the advantage of Logic-less template (such as mustache)? Cult of Logic-Less Templates mustache – Logic-less templates 然后… 英文都好难懂啊

比如 Mustache, 移除了 for if 等等语句, 用变量的值直接表示 if 执行的逻辑:

Shown.
{{#nothin}}
  Never shown!
{{/nothin}}

以及自动对数据进行替换: Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
Hash:

Data:

{
  "repo": [
    { "name": "resque" },
    { "name": "hub" },
    { "name": "rip" },
  ]
}

Output:

<b>resque</b>
<b>hub</b>
<b>rip</b>

或者更花哨一些的, 其实还是在实现 ejs 里的 for if 等等功能, 这样的方案看不出这个取舍带来特别的好处啊, 仅仅是模板的性能提升么? 但最快的 doT 也是能潜入 JS 代码的呀?

或者说 Logicless template 适用什么样的场景, Node 社区里会这么热?


5 回复

Node.js 中 Logicless Template 对应什么样的应用场景?

Logicless 模板(例如 Mustache)是一种将模板与业务逻辑分离的设计。这种设计的核心理念在于通过移除模板中的控制结构(如 iffor 等),使得模板更加简洁且易于维护。这种设计方式适用于以下几种场景:

  1. 团队协作:在大型项目中,前端和后端开发人员可能需要频繁地协同工作。使用 Logicless 模板可以减少前后端之间的沟通成本,因为模板只负责展示数据,而逻辑部分由后端处理。

  2. 代码复用:Logicless 模板通常具有高度的可重用性。模板中的逻辑很少,这使得它们可以在不同的上下文中轻松复用。

  3. 安全性和可维护性:由于模板中没有复杂的逻辑,因此可以更容易地审查和测试模板,从而提高安全性。同时,简单的模板也更容易维护。

示例代码

Mustache 模板示例

假设我们有一个简单的用户列表,我们想在页面上显示这些用户的姓名。我们可以使用 Mustache 模板来实现这一点。

模板文件 (users.mustache)

<ul>
  {{#users}}
  <li>{{name}}</li>
  {{/users}}
</ul>

Node.js 代码

const Mustache = require('mustache');
const fs = require('fs');

// 用户数据
const users = [
  { name: 'Alice' },
  { name: 'Bob' },
  { name: 'Charlie' }
];

// 读取模板文件
const template = fs.readFileSync('users.mustache', 'utf8');

// 渲染模板
const renderedHtml = Mustache.render(template, { users });

console.log(renderedHtml);

输出结果

<ul>
  <li>Alice</li>
  <li>Bob</li>
  <li>Charlie</li>
</ul>

在这个例子中,模板文件 users.mustache 只包含简单的 HTML 结构,并且通过 Mustache 的语法 {{#users}}{{/users}} 来遍历用户数组。Node.js 代码则负责提供数据并渲染模板。这种方式使得模板非常简单,易于理解和维护。

总结

Logicless 模板在 Node.js 社区中受到欢迎,主要是因为它们简化了前后端的协作过程,提高了代码的复用性和安全性。尽管它们在某些情况下可能不如嵌入式 JavaScript 模板(如 EJS 或 Pug)那样灵活,但在特定的应用场景中,它们仍然是一种非常有效且实用的选择。


我觉得 Logic-less templates 也就是如同其字面意思吧。 在模板里码上一堆逻辑,有点混乱了,本身模板就是为了解决数据渲染的,而并不解决逻辑处理吧,况且维护会很痛苦的。

话说,undersocre 那个模板引擎有用过没…?

就玩了下,看评测效率不是很高,除了引入外部代码的体积以外没发现特别的优势啊。

Node.js中的Logicless Template(无逻辑模板)通常用于需要分离视图层与业务逻辑的应用场景。这种模板引擎强制将所有的逻辑处理放在后端服务中完成,从而使得模板本身只负责展示数据。这种方式有助于保持模板的清晰和易于维护,并且可以更好地支持前端工程师专注于UI开发,而后端工程师则专注于业务逻辑。

例如,Mustache是一个典型的无逻辑模板引擎,它不支持条件判断、循环等逻辑语句,所有这些都需要在服务端预先处理好,再传递给模板引擎进行渲染。

以下是一个简单的Node.js + Mustache的例子:

const mustache = require('mustache');
const fs = require('fs');

// 数据源
const data = {
  repo: [
    { name: 'resque' },
    { name: 'hub' },
    { name: 'rip' },
  ],
  nothing: false,
};

// 模板字符串
const template = `
{{#repo}}
  <b>{{name}}</b>
{{/repo}}

{{^nothing}}
  This will not be displayed.
{{/nothing}}
`;

// 渲染模板
const rendered = mustache.render(template, data);

console.log(rendered);

在这个例子中,我们使用了{{#repo}}{{/repo}}来遍历data.repo数组,而{{^nothing}}{{/nothing}}则用来检查data.nothing的布尔值是否为false。通过这种方式,我们可以确保所有的逻辑都在服务端处理完成,模板本身只需要关注如何展示数据即可。

这种方式非常适合于团队协作,特别是当后端和前端的职责明确时,能够提高开发效率并降低维护成本。

回到顶部