如何使用Mongoose与Node.js从MongoDB Atlas取数据并在EJS页面展示
解决步骤
默认你使用的是Express + EJS的技术栈,按下面两步修改即可:
- 修改后端查询逻辑,把查询到的数据传递给EJS模板
你现在的代码仅把数据打印到控制台,需要替换为调用res.render传入数据:
// 对应路由的处理逻辑 app.get('/orders', function (req, res) { Shipment.find({}, function (err, shipments) { if (err) throw err // 第一个参数是你要渲染的ejs文件名(不带后缀),第二个参数是传给模板的数据源 res.render('orders', { shipments: shipments }) }) })
- 修改orders.ejs的表格部分,用循环渲染数据
你需要用EJS的语法遍历传入的shipments数组,逐行填充表格内容,嵌套的地址字段直接通过层级取值即可,同时我修复了原代码中div类名少闭合引号的小问题:
<div class="mt-5 m-auto"> <h3 class="mt-5">This is the order table</h3> <%- include ("./partials/messages"); %> <div class="col-sm"> <table class="table table-striped table-hover"> <thead> <tr> <th>#</th> <th>Customer</th> <th>Address</th> <th>City</th> <th>State</th> <th>Zip</th> <th>Phone</th> <th>Status</th> </tr> </thead> <tbody> <% shipments.forEach(function(shipment, index){ %> <tr class="success"> <!-- 数组索引从0开始,加1作为序号 --> <td><%= index + 1 %></td> <!-- 父级字段直接取值 --> <td><%= shipment.name %></td> <!-- 嵌套在address里的字段按层级取值 --> <td><%= shipment.address.address %></td> <td><%= shipment.address.city %></td> <td><%= shipment.address.state %></td> <td><%= shipment.address.zip %></td> <td><%= shipment.phone %></td> <!-- 你当前的集合结构里没有status字段,需要的话自行补全对应取值逻辑 --> <td></td> </tr> <% }) %> </tbody> </table> </div> </div>
内容的提问来源于stack exchange,提问作者Tamia
相关产品推荐
相关产品推荐

