这段时间一直在使用 Express 框架,虽然官方推荐 Pug 作为模板引擎,但我还是对 EJS 更感冒,官方也提供了 Express -e 的选择,由于之前没有认真看文档,导致了前段时间遇到的一个渲染问题,纠结了很久才得以解决,这里笔记下 EJS 的常用方法,算作一次梳理,欢迎补充指正。

基本语法

  • <%=: 转义输出
  • <%-: 不转义输出(即输出源码)
  • <%#: 评论注释
  • <%: 输出 JS
  • <%_: 输出 JS 并且删除标签之前所有的空格
  • %>: 正常闭标签
  • -%>: 移除标签后的换行符
  • _%>: 移除便签后的所有的空格

实例对比

EJS

1
2
3
4
5
<p>Hello, <%- myHtml %>.</p>
<p>Hello, <%= myHtml %>.</p>
<p><%# comment %></p>
<p>Hello, <%- myMaliciousHtml %>.</p>
<p>Hello, <%= myMaliciousHtml %>.</p>

Locals

1
2
3
4
{
"myHtml": "<strong>Leeon</strong>"
, "myMaliciousHtml": "</p><script>document.write()</script><p>"
}

HTML

1
2
3
4
5
<p>Hello, <strong>Leeon</strong>.</p>
<p>Hello, &lt;strong&gt;Leeon&lt;/strong&gt;.</p>
<p></p>
<p>Hello, </p><script>document.write()</script><p>.</p>
<p>Hello, &lt;/p&gt;&lt;script&gt;document.write()&lt;/script&gt;&lt;p&gt;.</p>

参考: