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

如何使用EJS将Express传递的数组数据渲染为列表式个人信息卡片

嘿,我看了你的代码和需求,发现几个小问题需要调整,帮你改得更贴合需求:

首先得纠正个小误解:你传到EJS里的不是数组,是一个包含count和rows属性的单个对象,所以外层那个遍历userData.length的循环完全没必要——userData是对象根本没有length属性,这会导致循环根本跑不起来或者直接报错。

你的核心需求是给rows里的3条患者数据各生成一个信息卡片,所以直接遍历userData.rows就够了。另外原来的ul/li结构适合做列表,做卡片的话用div会更灵活,同时你之前的标签都没闭合(比如<span>和<li>),这会导致页面结构混乱,得补上。

给你修改后的完整EJS代码:

<!-- 外层容器,用来统一布局所有卡片 -->
<div class="card-container">
  <!-- 遍历rows数组里的每一条患者数据 -->
  <% userData.rows.forEach(patient => { %>
    <!-- 单个患者信息卡片 -->
    <div class="patient-card">
      <h3>患者详情</h3>
      <p><strong>患者ID:</strong><%= patient.p_id %></p>
      <p><strong>性别:</strong><%= patient.gender %></p>
      <p><strong>姓名:</strong><%= patient.patient_name %></p>
    </div>
  <% }) %>
</div>

如果想要卡片看起来更像样子,再加一段CSS样式(可以放在EJS的<style>标签里或者外部样式文件):

.card-container {
  display: flex;
  gap: 1.2rem;
  flex-wrap: wrap;
  padding: 1.5rem;
}

.patient-card {
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 1.5rem;
  width: 260px;
  box-shadow: 0 2px 6px rgba(0,0,0,0.08);
  background-color: #fff;
}

.patient-card h3 {
  margin-top: 0;
  color: #2d3748;
  font-size: 1.2rem;
}

.patient-card p {
  margin: 0.6rem 0;
  color: #4a5568;
  font-size: 0.95rem;
}

简单说下修改的关键点:

  • 去掉了没用的外层循环,直接遍历userData.rows这个真正的患者数据数组
  • 用forEach遍历比传统for循环更简洁(如果你习惯用for循环,改成for(let j=0; j<userData.rows.length; j++),然后用userData.rows[j]获取患者对象也完全可以)
  • 用div构建卡片结构,配合CSS实现了卡片的视觉效果
  • 完整展示了每个患者的所有信息,并且所有标签都正确闭合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:32:41