【发布时间】:2021-08-24 10:41:31
【问题描述】:
所以我正在尝试将 cmets 添加到我为猫鼬使用嵌套填充的帖子中。但是一旦我使用嵌套填充,它就会给我“帖子不可迭代”的错误,早些时候当我只预先填充用户数据时它工作正常。我正在分享我的代码,希望它能更清楚地解释我的担忧。
错误
TypeError: /home/vivek/Vivek/CN WEBD/codel/views/home.ejs:16
14| <div id="posts-list-container">
15| <ul>
>> 16| <% for (post of posts){ %>
17|
18|
19| <li>
posts is not iterable
at eval (eval at compile (/home/vivek/Vivek/CN WEBD/codel/node_modules/ejs/lib/ejs.js:662:12), <anonymous>:21:21)
at home (/home/vivek/Vivek/CN WEBD/codel/node_modules/ejs/lib/ejs.js:692:17)
at tryHandleCache (/home/vivek/Vivek/CN WEBD/codel/node_modules/ejs/lib/ejs.js:272:36)
at View.exports.renderFile [as engine] (/home/vivek/Vivek/CN WEBD/codel/node_modules/ejs/lib/ejs.js:489:10)
at View.render (/home/vivek/Vivek/CN WEBD/codel/node_modules/express/lib/view.js:135:8)
at tryRender (/home/vivek/Vivek/CN WEBD/codel/node_modules/express/lib/application.js:640:10)
at Function.render (/home/vivek/Vivek/CN WEBD/codel/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/home/vivek/Vivek/CN WEBD/codel/node_modules/express/lib/response.js:1012:7)
at ServerResponse.res.render (/home/vivek/Vivek/CN WEBD/codel/node_modules/express-ejs-layouts/lib/express-layouts.js:77:18)
at /home/vivek/Vivek/CN WEBD/codel/controllers/home_controllers.js:24:24
at immediate (/home/vivek/Vivek/CN WEBD/codel/node_modules/mongoose/lib/model.js:5074:18)
at process._tickCallback (internal/process/next_tick.js:61:11)
Home_controller.js:
const Post = require('../models/post');
module.exports.home = function(req, res){
Post.find({})
.populate('user').
populate({
path: 'comments',
populate: {
path: 'user'
}
})
.exec(function(err, posts){
return res.render('home', {
title: "Home",
posts: posts
});
})
};
Home.ejs: 我在哪里获取数据
<div id="posts-list-container">
<ul>
<% for (post of posts ){ %>
<li>
<p><%= post.user.name %>
<%= post.content %>
</p>
<div class="post-comments">
<% if (locals.user){ %>
<form action="/comments/create" method="POST">
<input type="text" name="content" placeholder="type here to comment">
<input type="hidden" name="post" value="<%= post._id%>">
<input type="submit" value="Add comment">
</form>
<%}%>
<div class="post-comment-list">
<ul id="post-comments-<%= post._id %>">
<% for (comment of posts.comments){ %>
<p>
<%= comment.content %>
<br>
<small>
<%= comment.user.name %>
</small>
</p>
<%} %>
</ul>
</div>
</div>
</li>
<% }%>
</ul>
</div>
CommentsSchema 模型
const mongoose = require('mongoose');
const commentScehma = new mongoose.Schema({
content:{
type: String,
required: true
},
//comment belogns to user
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
post: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}
},{
timestamps: true
})
const Comment = mongoose.model('Comment', commentScehma)
module.exports = Comment;
后架构模型
const mongoose = require('mongoose');
const postSchema = new mongoose.Schema({
content: {
type: String,
required: true
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
// inclue the array of id's of all comments in this post schema itself
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'comment'
}
]
},{
timestamps: true
});
const Post = mongoose.model('Post', postSchema);
module.exports = Post;
【问题讨论】:
标签: node.js mongodb express mongoose