Nodejs模板中doT的使用讲解下

Nodejs模板中doT的使用讲解下

google了好久, 都是关于 jade ejs ===相关的一些文章

doT效率也是极高的, 为什么选择它的那么少呢, 很是奇怪

是不是有什么地方doT做不到, 还是因为什么呢

2 回复

Node.js模板中doT的使用讲解

doT是一个轻量级且高效的JavaScript模板引擎。虽然它不像Jade或EJS那样流行,但它确实有一些独特的优势,特别是在性能方面。本文将详细介绍如何在Node.js项目中使用doT模板引擎,并通过一些简单的示例来说明其用法。

1. 安装doT

首先,你需要安装doT库。你可以使用npm来安装:

npm install dot

2. 创建模板文件

doT支持多种方式创建模板,最常见的是使用字符串或者外部文件。这里我们先看一个简单的字符串模板:

var doT = require('dot');

// 定义一个模板字符串
var templateString = doT.template('<h1>Hello, {{= it.name }}!</h1>');

// 渲染模板
var result = templateString({ name: 'World' });
console.log(result);

输出将是:

<h1>Hello, World!</h1>

3. 使用外部模板文件

你也可以将模板保存在单独的文件中,然后读取该文件并渲染它。假设你有一个名为template.dot的文件,内容如下:

<h1>Hello, {{= it.name }}!</h1>

在Node.js中,你可以这样使用:

var fs = require('fs');
var doT = require('dot');

// 读取模板文件
var templateString = fs.readFileSync('template.dot', 'utf8');
var template = doT.template(templateString);

// 渲染模板
var result = template({ name: 'Universe' });
console.log(result);

4. 模板中的条件语句

doT还支持简单的条件语句,这使得模板更加灵活。例如:

var doT = require('dot');

var templateString = doT.template(`
{{? it.active }}
  <p>User is active.</p>
{{??}}
  <p>User is not active.</p>
{{?}}
`);

var result = templateString({ active: true });
console.log(result);

输出将是:

<p>User is active.</p>

5. 模板中的循环

doT也支持在模板中进行循环。例如,渲染一个用户列表:

var doT = require('dot');

var templateString = doT.template(`
<ul>
{{~ it.users :value:index }}
  <li>{{= value.name }}</li>
{{~}}
</ul>
`);

var users = [
  { name: 'Alice' },
  { name: 'Bob' }
];

var result = templateString({ users: users });
console.log(result);

输出将是:

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

总结

尽管doT可能不像其他模板引擎那样流行,但它的简洁性和高性能使其成为某些场景下的理想选择。希望上述示例能帮助你更好地理解和使用doT模板引擎。


doT 是一个轻量且高效的 JavaScript 模板引擎。虽然 Jade 和 EJS 更为流行,但 doT 在某些场景下依然有其独特的优势,比如更高的执行效率和较小的体积。下面我会简要介绍如何在 Node.js 中使用 doT,并提供一些基本示例。

安装 doT

首先,你需要安装 doT。可以通过 npm 来安装:

npm install dot

基本使用

创建模板字符串

doT 模板语法相对简单,你可以通过插值表达式 {{= }} 或者代码块 {{# }} 来插入变量或执行代码逻辑。

const doT = require('dot');

// 定义一个简单的模板字符串
const templateStr = `
  <h1>{{= it.title }}</h1>
  <p>{{! it.content }}</p>
`;

// 编译模板
const compiledTemplate = doT.template(templateStr);

// 渲染模板
const result = compiledTemplate({ title: 'Hello World', content: 'This is a demo' });

console.log(result);

在这个例子中,{{= it.title }} 用于插入变量值,而 {{! it.content }} 用于插入未经转义的 HTML 内容(这在处理用户提交的数据时可能需要注意安全性)。

使用代码块

doT 还支持条件判断和循环等复杂逻辑:

const complexTemplateStr = `
  {{ if it.showSubtitle && it.subtitle != "" }}
    <h2>{{= it.subtitle }}</h2>
  {{ endif }}
  
  <ul>
    {{~ it.items :item:index }}
      <li>{{= index + 1 }}. {{= item }}</li>
    {{~}}
  </ul>
`;

const complexCompiledTemplate = doT.template(complexTemplateStr);
const complexResult = complexCompiledTemplate({
  showSubtitle: true,
  subtitle: 'Subtitle',
  items: ['Item 1', 'Item 2', 'Item 3']
});

console.log(complexResult);

这段代码展示了如何在模板中使用条件判断 ({{ if }}) 和循环 ({{~}})。

为什么使用较少?

尽管 doT 有很多优点,如高效和小巧,但它也有一些限制。例如,它没有像 EJS 或 Pug (原名 Jade) 那样丰富的内置语法和社区支持。因此,在选择模板引擎时,开发人员可能会根据项目需求、团队熟悉度以及特定的性能考虑来选择更适合的工具。

回到顶部