如何使用ejs从mongoDB集合中提取文档,使每个文档在浏览器上显示一次



我希望有人帮我克服这个障碍。我正在尝试从mongoDB中提取一些具有相同属性的文档。我使用的是ejs模板和猫鼬。除了每个文档在浏览器上出现不止一次之外,一切都正常,但我希望每个文档都按顺序出现一次。我有以下代码:indexSchema:

const indexSchema = mongoose.Schema({
title: String,
subtitle: String,
quote: String,
image:  String,
imageCaption: String,
author: String,
qualification: String,
body: String,
createdAt: {
type: Date,
default: Date.now
}
});
const Index =  mongoose.model('Index', indexSchema)
module.exports = Index;

索引路径:

app.get("/", async (req, res) => {
await Index.find((err, index) => {
if (err){
console.log("Sorry, posts not found successfully");
console.log(err);
} else{

console.log("Collections received successfully!")
res.render("index", {index:index});

index.ejs:

<%- include ('partials/header') %>
<div class="container">
<% index.forEach(index => { %>
<img src="<%= index.image %>" class="img-fluid mt-0.5" alt="Responsive image">
<div class="jumbotron jumbotron-fluid mt-1">
<div class="container">
<div class="row">
<div>
<h3><%= index.title %></h3>
<h5><%= index.subtitle %>.</h5><i><%= index.quote %></i>
</div>
</div>
</div>
</div>

<h3 class="mb-4">Featured Posts</h3>
<a href="posts/" class="btn btn-outline-success">View All Posts</a>
<div class="card mt-4">
<div class="card-body">
<h4 class="card-title"><%= index.title %></h4>
<div class="card-subtitle text-muted mb-2">
<%= index.createdAt.toLocaleDateString(); %>
</div>
<div class="card-text mb-4">
<%= index.body %>
</div> 
<div>
<a href="/posts/<%= index._id %>" class="btn btn-outline-primary">Read more<i class="fas fa-angle-double-right"></i></a>
</div>
</div>
</div>
<% }) %>
</div>
<%- include ('partials/footer') %>

从索引路由来看,很明显我使用的是find()函数。我知道这个函数会带回集合中的所有文档。由于每个文档都有标题、副标题、作者等,我很难使用forEach循环来确保每个文档在浏览器上出现一次。我知道唯一能解决这个问题的方法是针对id,因为每个文档都有一个唯一的id。但我似乎把一切都搞砸了,因为我不知道如何在我的HTML模板中完成这项工作,因为findById()似乎与forEach()不兼容。正在删除来自ejsforEach()还防止数据库中的所有图像出现在浏览器上。

我发现,通过使用mongoose连接模式,我能够实现我想要的相同结果。虽然这绝对不是最好的方法,但我能够使用它来提升到下一个级别,直到我获得更多关于猫鼬和ejs 的经验

相关内容

最新更新