在 ejs 函数中传递 html 的语法问题

Syntax issues with passing through html in an ejs function

我想根据我的 mongo 数据库中存储的评分循环播放一个星标 svg。我单独测试了这个函数,所以我知道它应该可以工作,但是我在将函数插入我的 ejs 页面并将 html 添加到函数中时遇到语法问题。

这是我当前的功能。错误通常会说“意外的令牌';'”或“意外的令牌')'”,具体取决于我尝试格式化 ejs 以使一切正常的方式。我觉得我的格式只是让 ejs 误读,但我无法弄清楚问题所在。

    <% function repeatStringNumTimes(string, times) {%>
                    <% return string.repeat(times)};%>
                        <%repeatStringNumTimes(%>
                            <%= <i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i> %>
                                <%, review.rating); %>

这是下面的测试函数,它在没有 ejs 或 html 实现的情况下工作。

function repeatStringNumTimes(string, times) {
  console.log(string.repeat(times));
}

repeatStringNumTimes(`a`, review);

我已经在没有 ejs 和 html 的情况下测试了该功能。我尝试了几种不同的 ejs 标签——老实说,我对这些标签以及在哪里使用它们都不是很了解。我可能为 html 使用了错误的标签。我绝对有正确的对象字符串等用于调用数据库,以及带有 类 的 svg 我已经测试过并且它们工作正常。

已解决 - 使用变量传递 html 字符串。使用 <%- 标签传递实际调用的函数。

<!-- GOT IT TO WORK!! -->

<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>

尝试修复 i-tag;我想“review.rating”是您 i-tag:

的正确选择
<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"> <%= review.rating %> </i>

到目前为止我明白了,你的“review.rating”returns 一个从 1 到 5 的值,取决于你想要用星号填充你的 ejs 文件的值,对吗?

<% for ( let i = 1; i <= <%= review.rating %> ; i++ ){ %>
<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i>
<% }; %>

SOLVED- 使用变量传递 html 字符串(这似乎主要是为了让我缩短函数中每一行的长度,因为我的格式化程序不喜欢我的 ejs 代码并且会重新格式化不正确)。我使用 <%- 标记来传递实际调用的函数。

<!-- GOT IT TO WORK!! -->

<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>