如何修复ejs模板?不会将html标签解释为html

时间:2019-05-11 15:58:03

标签: javascript html node.js ejs

我正在关注有关具有ejs模板的node.js和mongodb的教程。 我有这个ejs模板,它使用javascript函数输出列表。此列表包括html标签。但是它不会解释这些html标签,而只是将它们显示为文本。

链接到本教程:https://closebrace.com/tutorials/2017-03-02/the-dead-simple-step-by-step-guide-for-front-end-developers-to-getting-up-and-running-with-nodejs-express-and-mongodb

这是导致问题的代码行

<h1>User List</h1>
    <ul>
      <%
        var list = '';
        for (i = 0; i < userlist.length; i++) {
          list += '<li><a href="mailto:' + userlist[i].email + '"></a>' + userlist[i].username + '</a></li>';
        }
      %>
      <%= list %>
    </ul>

感谢您的支持!

1 个答案:

答案 0 :(得分:0)

我认为这是本教程中的错误。当您添加list变量时,就是将HTML元素放入字符串中。

当您执行<%= list %>时,Ejs会自动转义它们。

要将字符串解释为HTML,必须将其更改为<%- list %>

已经说过这一点,在使用它时您需要非常小心,因为它可能会使网站向人们开放脚本到您的页面(XSS)中开放。

您最好这样做:

<ul>
  <% userlist.forEach(function(user){ %>
    <li>
      <a href="mailto:<%= user.email %>"><%= user.username %></a>
    </li>
  <% }); %>
</ul>