CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 进阶/课时/模板引擎
RawBlame
课时目录12 节

Node.js 进阶

  1. 01Node 进阶概览
  2. 02EventEmitter
  3. 03错误类型与处理
  4. 04语义化版本
  5. 05创建与发布包
  6. 06命令行应用
  7. 07Inquirer 与 prompts
  8. 08chokidar 与热重载
  9. 09模板引擎
  10. 10Node 与数据库
  11. 11glob 与文件模式
  12. 12综合练习

模板引擎

template-engines 概览。

25 分钟

模板引擎

从 数据 + 模板文件 生成文本(Markdown、SQL、YAML、源码)是 Node 脚本常见任务。本课概览 template-engines:Handlebars、EJS、Mustache 等——与 nva-glob 批处理组合成 codegen 流水线。

学习目标

  • 理解逻辑-less vs 带 helper 的模板差异
  • 用 Handlebars 渲染一次文件生成
  • 知道何时 不要 用模板(应用层应用 Nest/Express)

为什么用模板

方式问题
字符串拼接引号/换行易错,难维护
模板引擎结构清晰,数据与视图分离

Spring 侧有 Thymeleaf/Freemarker;Node CLI 侧 Handlebars / EJS 更常见。

Handlebars 示例

import Handlebars from "handlebars";
import fs from "node:fs/promises";

const tpl = await fs.readFile("templates/lesson.md.hbs", "utf8");
const compile = Handlebars.compile(tpl);

const md = compile({
  title: "Node 与数据库",
  slug: "nva-db",
  links: [
    { href: "/tracks/postgresql-essentials", label: "PostgreSQL" },
    { href: "/tracks/mongodb-essentials", label: "MongoDB" },
  ],
});

await fs.writeFile("out/nva-db.md", md);

partials 可抽公共页眉;helpers 注册日期格式化等,避免模板里写 JS 逻辑过多。

引擎选型

引擎特点
Mustache无逻辑,极简
HandlebarsMustache 超集,helper
EJS嵌入 <% %> JS,灵活但易乱
eta轻量,适合小工具

站点课时渲染走 MDX/Markdown(platform 层),不是本课模板栈;本课面向 生成 draft 或 migration 文件。

安全注意

  • 模板数据来自 不可信输入 时,注意 HTML 转义(Handlebars 默认转义 {{}})
  • 禁止 eval 或 EJS 里执行任意用户代码
  • 生成 SQL 仍要用 参数化(pg-intro),模板只生成 结构 不拼接用户 id

与 watch 联动

nva-watch 监听 templates/,变更时重新 compile 输出到 out/——本地预览 codegen 效果。

练习

  • 做 lesson.md.hbs:含 title、summary、三条 bullet
  • 批量渲染 3 个 slug 到 out/
  • 列一条:哪些字段适合模板,哪些必须运行时 API 拉取

小结

数据进模板,文本出文件;SQL 与 HTML 仍要转义与参数化。 下一课 Node 与数据库驱动。

加载本节练习…
← 上一课chokidar 与热重载下一课 →Node 与数据库