3 回答
TA贡献1860条经验 获得超8个赞
(node:3508) UnhandledPromiseRejectionWarning: TypeError: this.comments is not iterable
该错误表明您正在尝试迭代一种不具有该功能的数据。
您可以检查打印类型:
console.log(typeof this.comments)
甚至,打印整个对象:
console.log(this.comments)
如您所见,在这两种情况下,您都得到一个对象,而不是列表(您如何看待)
所以你可以做两件事:
1-可迭代列表
this.comments是一个对象,但在该对象中你有你想要的列表,所以只需使用列表。
bugSchema.methods.addComment = function(comment){
const username = comment.user;
const content = comment.content;
console.log(comment);
//const updatedComments = [...this.comments];
const updatedComments = [...this.comments.comment];
updatedComments.push({
user : username,
content: content
});
this.comments = updatedComments;
return this.save();
};
或者您可以修改架构,使评论成为列表而不是对象
2-注释作为架构中的列表
将评论属性定义为列表
const bugSchema = new Schema({
title: {
type: String,
required: true
},
description: {
type: String,
required: true
},
...
...,
comments:[
{
user:{
type: String,
required: true
},
content: {
type: String,
required: true
}
}
]
});
然后,尝试按照您的方式对其进行迭代
bugSchema.methods.addComment = function(comment){
const username = comment.user;
const content = comment.content;
console.log(comment);
const updatedComments = [...this.comments];
updatedComments.push({
user : username,
content: content
});
this.comments = updatedComments;
return this.save();
};
TA贡献1911条经验 获得超7个赞
从您的架构注释中,它不是一个数组。您正在尝试将对象传播到数组中。const updatedComments = [...this.comments];还推动阵列上的工作。尝试通过在 bugSchema 之外声明 commentSchema 来修改您的模式定义。
const commentSchema = new Schema({
user:{
type: String,
required: true
},
content: {
type: String,
required: true
}
})
const bugSchema = new Schema({
comments: {
type: [commentSchema]
}
})
Bug.findByIdAndUpdate(bugId, {$push: {comments: newComment}})
TA贡献1844条经验 获得超8个赞
我不确定,但评论是一个对象而不是数组,所以你不能使用 [...this.comments] 推送,我认为这是你想要推送的评论?
const updatedComments = [...this.comment];
updatedComments.push({
user : username,
content: content
});
this.comment = updatedComments;
添加回答
举报