EJS 模板速查表
把 EJS 模板最常用语法按功能分组整理,Node.js 服务端渲染时直接查表。
返回 编程语言基础语法 5
<% code %>执行 JavaScript 代码(不输出)
<%= value %>输出变量(HTML 转义)
<%- value %>输出变量(不转义,原始 HTML)
<%# comment %>注释(不输出到模板)
<%_ code %>执行代码并移除前后空白
条件语句 3
<% if (condition) { %>...<% } %>if 条件判断
<% if (condition) { %>...<% } else { %>...<% } %>if-else 条件判断
<% if (a) { %>...<% } else if (b) { %>...<% } else { %>...<% } %>多条件判断
循环语句 4
<% for (let i = 0; i < items.length; i++) { %>...<% } %>for 循环
<% items.forEach(item => { %>...<% }) %>forEach 循环
<% for (const item of items) { %>...<% } %>for...of 循环
<% for (const key in obj) { %>...<% } %>for...in 循环
包含模板 4
<%- include("header") %>包含 header.ejs 文件
<%- include("footer") %>包含 footer.ejs 文件
<%- include("sidebar", { user }) %>包含并传递参数
<%- include("partials/nav") %>包含子目录中的模板
布局与继承 3
<%- body %>在布局中渲染子模板内容
<% layout("layout") -%>指定布局文件(需 express-ejs-layouts)
<%- include("header", {title: "Home"}) %>传递参数到包含的模板
常用技巧 5
<%= user?.name || "Guest" %>可选链和默认值
<%= JSON.stringify(data) %>输出 JSON 字符串
<%= new Date().toLocaleDateString() %>格式化日期
<%= items.join(", ") %>数组转字符串
<%= Math.round(price * 100) / 100 %>保留两位小数
Express 集成 4
app.set("view engine", "ejs")设置 EJS 为模板引擎
res.render("index", { title: "Home" })渲染模板并传递数据
app.set("views", "./views")设置模板目录
res.render("users/list", { users })渲染子目录模板
💡 提示
- <%= %> 会自动转义 HTML,防止 XSS 攻击,<%- %> 不转义,用于输出原始 HTML。
- include 是同步加载,会将被包含的模板内容插入到当前位置。
- EJS 支持完整的 JavaScript 语法,可以在 <% %> 中写任何 JS 代码。
- 布局继承需要 express-ejs-layouts 中间件,或者手动 include header/footer。
- 缓存模板可以提高性能:app.set("view cache", true)。
- 开发时关闭缓存:app.set("view cache", false),修改模板后立即生效。