Nodejs中关于EJS的几个问题

Nodejs中关于EJS的几个问题

本人新手,恳请解释下如下几个EJS的问题,不胜感激; 1)EJS 的<%= %> 和 <%- %>的区别是什么?(恳请解释的尽量详细些,能有例子最好) 2)EJS 学习资料去哪里找?(我网上搜集了些,但是都不理想)

12 回复

Nodejs中关于EJS的几个问题

1)EJS 的 <%= %><%- %> 的区别是什么?

在EJS模板引擎中,<%=<%- 是用来插入变量到HTML中的标签。它们的主要区别在于对输出内容的安全性处理。

  • <%= %>: 这个标签会自动对插入的变量进行HTML转义,以防止XSS攻击。这意味着如果你插入的内容包含HTML标签,这些标签将不会被解析为HTML,而是作为普通文本显示。

    示例代码:

    <div><%= '<strong>Hello</strong>' %></div>
    

    输出结果将会是:

    <div>&lt;strong&gt;Hello&lt;/strong&gt;</div>
    
  • <%- %>: 这个标签不会对插入的变量进行任何处理,直接输出原始字符串。因此,如果插入的内容包含HTML标签,这些标签会被浏览器解析为HTML。

    示例代码:

    <div><%- '<strong>Hello</strong>' %></div>
    

    输出结果将会是:

    <div><strong>Hello</strong></div>
    

2)EJS 学习资料去哪里找?

对于学习EJS,可以参考以下资源:

  • 官方文档: EJS的官方文档是最权威的资源,包含了详细的API说明和使用指南。你可以访问这里获取最新版本的文档。

  • 在线教程: 一些技术博客或在线课程平台如MDN Web Docs、FreeCodeCamp等也提供了EJS的学习材料,这些资源通常包含实际的代码示例和项目实践。

  • 书籍: 虽然专门针对EJS的书籍可能不多,但一些介绍Node.js和Express框架的书籍通常也会包括EJS的相关章节。例如《Node.js、Express与MongoDB Web开发》这本书就包含了EJS的基本用法。

希望这些信息对你有所帮助!如果还有其他问题,欢迎继续提问。


有基础的话看一下cnode的源码,很好的学习对象https://github.com/cnodejs/nodeclub 另外ejs的说明确实很少,建议还是边用边学吧。可以去看看作者的README

escape https://github.com/visionmedia/ejs/blob/master/lib/utils.js#L8

/**
 * Escape the given string of `html`.
 *
 * [@param](/user/param) {String} html
 * [@return](/user/return) {String}
 * [@api](/user/api) private
 */

exports.escape = function(html){ return String(html) .replace(/&(?!\w+;)/g, ‘&amp;’) .replace(/</g, ‘&lt;’) .replace(/>/g, ‘&gt;’) .replace(/"/g, ‘&quot;’); };

楼上一针见血。 <%=%>就是你内容是什么它就输出什么,包括你输入带有html标签的时候转化,<%-%>则不会。比方说通过富文本编辑器存入数据库的内容,实际上存入的是编辑内容的源码,包含了html标签,应该用<%-%>输出才能“所见及所得”。

但是像一些评论,或者留言什么的就应该是<%=%>输出的,至于原因这个都懂的。

这里有一篇入门教程, http://www.csser.com/board/4fddc4f0b28ed7d857001674
其实它不复杂, 遇到不懂的要学会看它源码~~

谢谢啊~~~~一定看

非常的清晰明白~~~非常感谢~

恩~谢谢啦~

谢谢啦~不错~

不错。

Node.js 中关于 EJS 的几个问题

1)EJS 的 <%= %><%- %> 的区别是什么?

在 EJS 模板引擎中,<%= %><%- %> 是两种不同的标签,用于插入数据到模板中。

  • <%= %>

    • 这个标签会将插入的数据经过 HTML 转义后输出。
    • 适合用于输出普通文本,以防止 XSS(跨站脚本攻击)。

    示例代码:

    <h1>Welcome, <%= user.name %></h1>
    

    假设 user.name"John Doe", 输出将是:

    <h1>Welcome, John Doe</h1>
    

    如果 user.name 包含恶意脚本(例如 "<script>alert('XSS')</script>"),它会被转义成 &lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;,从而避免执行恶意脚本。

  • <%- %>

    • 这个标签会直接输出插入的数据,不会进行任何转义。
    • 适合用于输出已经预处理过的 HTML 片段,但使用时需要特别小心,以避免 XSS 攻击。

    示例代码:

    <div class="content">
      <%- content %>
    </div>
    

    假设 content"<strong>Hello</strong>", 输出将是:

    <div class="content">
      <strong>Hello</strong>
    </div>
    

    如果 content 包含恶意脚本(例如 "<script>alert('XSS')</script>"),它将被原样输出,从而可能导致 XSS 攻击。

2)EJS 学习资料去哪里找?

学习 EJS 可以从以下几个资源开始:

  • 官方文档:EJS 的官方文档是最权威的学习资源。你可以在这里找到详细的 API 文档和使用说明。

  • 在线教程:许多编程社区和博客都有关于 EJS 的教程。一些知名的平台包括:

  • 视频教程:YouTube 上有很多关于 EJS 的教学视频,可以帮助你更直观地理解。

    • YouTube 搜索 “EJS Tutorial”
  • 书籍:虽然 EJS 本身不是特别复杂,但一些前端框架相关的书籍可能会包含相关内容。

    • 《Express.js 实战》(Express.js in Action)

通过这些资源,你应该能够掌握 EJS 的基本用法,并能在项目中灵活运用。

回到顶部