如何在 for loop 中同时使用 innerHTML 和 ejs?



我想用innerHTML列出每条消息。 如果我不必使用innerHTML,我可以轻松地执行以下操作。

<div>
<% for (var i = 0; i < messages.length; i++) { %>
<p><%= messages[i] %></p>
<% } %>
</div>

我必须为此目的使用innerHTML的原因是我有 React.js 代码被 webpack 最小化,所以我不能将 ejs 代码放在 React 代码中我想要的位置。 为了解决这个问题,我需要在 React 代码中放入id,以便我可以将消息放置在我想要的位置。所以我尝试了以下内容。

反应代码:

<div id="messagesGoHere"></div>

index.ejs Code:

<script>
<% for (var i = 0; i < messages.length; i++) { %>
document.getElementById("messagesGoHere").innerHTML += "<p><%= messages[i] %></p>";
<% } %>
</script>

这返回错误说

未捕获的语法错误:无效或意外的令牌

我使用 node.js、express 和 redis 来存储消息。

我感谢任何建议。

更新:

以下是我呈现messages对象的方式。

app.get('/', function (req, res) {
// Get messages
client.lrange('chat:messages', 0, -1, function (err, messages) {
if (err) {
console.log(err);
} else {
// Get messages
var message_list = [];
messages.forEach(function (message, i) {
message_list.push(message);
});
// Render page
res.render('index', { messages: message_list });
}
});
});

注意事项:

  • 我在问题中提供的第一段不依赖于innerHTML的代码绝对可以正常工作,这证明我的服务器端代码是正确的。
  • 至于<script>标签中的 ejs 代码,如果我不使用i变量,而是使用像这样"<p><%= messages[0] %></p>"0,它成功地返回了第一条消息,数量与 for 循环的计数一样多,这也证明了我的服务器端代码正在工作。
  • 问题是for 循环以及ejs 和 innerHTML 的使用。不是我的服务器端代码或任何其他代码。

将消息分配给 JavaScript 变量

<script>
var msgs= <%=messages %>
for (var i = 0; i < msgs.length; i++) {
document.getElementById("messagesGoHere").innerHTML += "<p>msgs[i] </p>";
}
</script>

好吧,我在这个问题上完全迷失了方向,但最终还是让它工作了。

首先,我的任何代码都没有错。

正如我最初认为的那样,以下代码片段是正确的。

<script>
<% for (var i = 0; i < messages.length; i++) { %>
document.getElementById("messagesGoHere").innerHTML += "<p><%= messages[i] %></p>";
<% } %>
</script>

在我删除了messages的 redis 数据并重新创建新数据后,它起作用了。

所以我相信我的 redis 数据中有一些阻碍

。对于不了解真正的问题,我深表歉意。

我还要感谢在这篇文章中帮助我的所有人。

最新更新