【问题标题】:Data from sql database is not rendering on EJS page unless it is in a loop (using node, express, ejs, mysql)除非在循环中(使用 node、express、ejs、mysql),否则来自 sql 数据库的数据不会在 EJS 页面上呈现
【发布时间】:2020-04-17 20:31:44
【问题描述】:

================ROUTE==============

app.get("/forums/:id", function(req, res){

connection.query('SELECT * FROM Forums where ForumID = ?', [req.params.id], function (err, forumResults) {
    if (err) throw err;
    console.log(forumResults);

    connection.query('SELECT * FROM  Users_Comments_Topics_Forums where ForumID = ?',[req.params.id], function (err, topicResults) {
        if (err) throw err;
        console.log(topicResults);

             res.render("Forums/show", {topic: topicResults, forum: forumResults});
});
});
});

注意:当页面加载时,它会通过 console.log 向我显示结果,因此我知道通过的数据。由于这个原因,我不认为问题出在路线之内,但我可能是错的。 ===================EJS页面================

这部分工作完美。来自数据库的数据呈现在此处的页面上。

   <%forum.forEach(function(forum){%>
            <div class="container card">

                <div class="container">
                    <div class="container forum_square">
                        <div class="row">
                            <div class="col-lg-6 block">
                                <a href ="/forums/<%= forum.ForumID %>"> <h5><%=forum.Board %></h5></a>  
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-lg-12">
                               <p><%= forum.Description %></p>

                            </div>
                        </div>
                    </div>

                            </div>
                        </div>
                    <% }); %>

                    </div>

但是,就在下面……

<div class="col-lg-6 card description">


                  <div class="card-body">
                    <h5 class="card-title">Welcome to <%=forum.Board%></h5>
                    <p class="card-text"><%=forum.Board %></p>
                    <a class="btn btn-primary" href="forums/new" role="button">Make new Forum</a>


            </div>
        </div>

forum.Board 未显示在页面上。除此之外,即使您删除页面上的所有其他内容并仅键入 ,它也不会显示。到目前为止,它只在循环中出现。

===================我试过的东西========================

我尝试在模板标签和数据之间添加和删除空格

我尝试过使用

我已经尝试回滚到以前的版本,它以前对我来说非常有效。

有人知道会发生什么吗?

【问题讨论】:

  • 你可以试试 。我猜 forum.Board 不是原始类型。
  • 不幸的是它没有用。它显示为“未定义”,而不仅仅是一个空白。

标签: javascript mysql sql node.js ejs


【解决方案1】:

您传递给 ejs 页面的变量 forum 是一个数组。 在 foreach 中,您对里面的实体使用相同的名称:

  <%forum.forEach(function(forum){%>

在foreach 变量forum 之外,它是一个数组,没有属性Board。

你可以尝试写第一个元素:

<% if (forum.length > 0) { %>
 <h5 class="card-title">Welcome to <%=forum[0].Board%></h5>
<% } %>

【讨论】:

  • 不幸的是,这也不起作用。 “无法读取未定义的属性'0'”。这是我这样做时得到的。就像它根本看不到它一样
  • 但它是否在运行示例的同一个 ejs 页面中?在我的代码的第二行“论坛”不能未定义:错误会出现在“if”代码中,错误应该是“无法读取未定义的属性'长度'”
  • 是的,它在同一个 ejs 页面中。这是截图imgur.com/a/ZCkt2FH
  • 错误在你写forum.Board[0]的下一行,在上一行你正确写&lt;%=forum[0].Board%&gt;
  • 图像相同,错误在文件 show.ejs 的第 41 行:您使用 form.Board[0] 的地方。您必须使用 form[0].Board。
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2021-07-26
  • 2021-03-27
  • 1970-01-01
  • 2018-08-29
  • 2016-09-14
相关资源
最近更新 更多