javascript - 即使正确渲染,EJS 变量也会引发错误

标签 javascript node.js ejs

我有一个对象数组,我试图在 ejs 模板中迭代,但我不断收到“引用错误:账单未定义”。

其他 StackOverflow 问题说要测试变量是否实际定义,所以我使用了

<h1><%= bills.length %></h1>

这正确地呈现了数组的长度,但它仍然抛出错误

ReferenceError: /index.ejs:11
    9|     <div id="billCarousel" class="carousel slide" data-ride="carousel">
    10|       <!--Indicators-->
 >> 11|       <h1><%= bills.length %></h1>

如果我将此行替换为

<%= (typeof bills === 'undefined') ? "ERROR" : bills[0].TrackNum %>

然后第一个对象的TrackNum正确渲染,但错误移至

ReferenceError: index.ejs:13
    11|       <ol class="carousel-indicators">
    12|         <%= (typeof bills === 'undefined') ? "ERROR" : bills[0].TrackNum %>
 >> 13|         <% for (var i=0; i < bills.length; i++) {%>

您可以在下面看到所有相关代码。

pages/index.ejs

<ol class="carousel-indicators">
    <h1><%= (typeof bills == 'undefined') ? "ERROR" : bills[0].TrackNum %></h1>
    <% for (var i=0; i < bills.length; i++) {%>
      <li data-target="#billCarousel" data-slide-to="<%= i %>" class="<%= (i == 0) ? 'active':'' %>"></li>
    <% } %>
</ol>

服务器.js

app.get('/', function(request, response) {
    billQuery.summary(function(data) {
        console.log(data.bills);
        response.render('pages/index', {
            page: "index",
            status: data.status,
            message: data.message,
            bills: data.bills
        });
    })
});

console.log(data.bills) 将数组正确打印到控制台。我尝试过在index.ejs 中渲染状态和消息,它们工作得很好。我已经使用

将 Express 引擎设置为 EJS
app.set('view engine', 'ejs');

在我有渲染index.ejs的路线之前。我还多次重新启动服务器并清除浏览器缓存,但错误仍然发生。我还缺少什么吗?

最佳答案

该问题是由于网站尝试加载图标时出现 404 错误所致。

app.get('*', function(request, response) {
    console.log("Couldn't retrieve "+request.url);
    response.render('pages/index', {
        page: "index",
        status: "Failed",
        message: "Error 404"
    });
});

当服务器尝试加载 favicon.ico 时,它调用了此路由,这似乎删除了我在“/”路由中传递的 bills 数组。我把

<link rel="shortcut icon" href="#">

在index.ejs 的头部作为临时修复。一旦我更改了此路由以呈现 404 页面,问题就得到了永久解决。

关于javascript - 即使正确渲染,EJS 变量也会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47385985/

相关文章:

javascript - 在javascript中加载函数

javascript - 如何使用 JQuery/Javascript 检查选择框是否为空

javascript - Jquery 动画整个 div 内容

node.js - 如何使用 process.hrtime.bigint

javascript - 在 Mongoose 模型中访问 Express.js 请求上下文

javascript - 如何在静态 Javascript 中嵌入 EJS 代码?

从父域到子域的 JavaScript 访问?

javascript - 将命令的响应传输到 Node

JavaScript 动态对象键 ejs

node.js - Express 在嵌套目录中提供静态文件