EJS Cheatsheet - EJS Template Engine Reference
EJS 模板引擎开发必备语法都在这里了,从标签语法到 Express 集成,按类别分类整理,写代码时直接复制。
Back to Languages基础语法 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 })渲染子目录模板
渲染 API 与配置 7
ejs.render(str, data)渲染模板字符串为 HTML
ejs.renderFile("tpl.ejs", data, (err, html) => {})异步渲染文件
ejs.compile(str, { client: true })编译为客户端可用函数
ejs.render(str, data, { cache: true })开启缓存渲染(生产环境)
ejs.delimiter = "$"设置自定义分隔符为 $
<%= locals.user %>访问 locals 传入的变量
const fn = ejs.compile(str); fn(data)编译后多次复用渲染函数
💡 Tips
- <%= %> 会自动转义 HTML,防止 XSS 攻击,<%- %> 不转义,用于输出原始 HTML。
- include 是同步加载,会将被包含的模板内容插入到当前位置。
- EJS 支持完整的 JavaScript 语法,可以在 <% %> 中写任何 JS 代码。
- 布局继承需要 express-ejs-layouts 中间件,或者手动 include header/footer。
- 缓存模板可以提高性能:app.set("view cache", true)。
- 开发时关闭缓存:app.set("view cache", false),修改模板后立即生效。
- ejs.compile 编译出的函数可在浏览器端使用,适合客户端渲染场景。