You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Express与EJS渲染API数据时,如何仅显示一次无有效案例提示?

解决EJS中重复显示无数据提示的问题

核心思路是先整体筛选有效数据,再判断是否渲染列表或提示,而非在循环单个项时判断输出提示。

方法一:Express路由提前过滤数据

在后端先筛选出有效数据(status不为"CLOSED"的项),再传给EJS模板,模板逻辑更简洁:

// Express路由代码
app.get('/cases', (req, res) => {
  // 模拟从API获取的原始数据
  const rawCases = [
    { id: 1, status: 'OPEN', title: '待处理案例' },
    { id: 2, status: 'CLOSED', title: '已关闭案例' },
    { id: 3, status: 'PENDING', title: '待审核案例' }
  ];

  // 过滤出非CLOSED的有效案例
  const validCases = rawCases.filter(item => item.status !== 'CLOSED');

  // 将过滤后的数据传给模板
  res.render('cases', { validCases });
});

对应的EJS模板代码:

<!-- cases.ejs -->
<% if (validCases.length > 0) { %>
  <div class="case-container">
    <% validCases.forEach(caseItem => { %>
      <div class="case-card">
        <h4><%= caseItem.title %></h4>
        <p>状态: <%= caseItem.status %></p>
      </div>
    <% }) %>
  </div>
<% } else { %>
  <!-- 仅在无有效数据时显示一次提示 -->
  <p class="empty-tip">未找到/无有效案例</p>
<% } %>

方法二:直接在EJS模板内过滤数据

如果不想在后端处理,也可直接在EJS中完成筛选和判断:

<!-- cases.ejs -->
<% 
  // 在模板内过滤有效数据
  const validCases = cases.filter(item => item.status !== 'CLOSED');
%>

<% if (validCases.length > 0) { %>
  <!-- 渲染有效案例列表 -->
  <% validCases.forEach(caseItem => { %>
    <div class="case-item">
      <!-- 案例内容 -->
    </div>
  <% }) %>
<% } else { %>
  <p>未找到/无有效案例</p>
<% } %>

错误原因说明

之前的写法会重复提示,是因为在循环每个数组项时判断并输出提示,只要遇到status为"CLOSED"的项就打印一次提示。而先整体筛选再判断的方式,只会在所有项都为"CLOSED"时,才输出一次提示。

内容的提问来源于stack exchange,提问作者mabo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:50:26