如何使用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
相关产品推荐
相关产品推荐

