TypeError: Cannot read property 'comments' of undefined
数据结构为mongodb数据库,posts集合下的comments为一个数组对象,把comment是最为评论区,想在存入新评论时,先检测评论区的个数,也就是comments的length属性。 代码如下:
function commentFloor (id, back) {
//打开数据库
mongodb.open(function (err, db) {
if (err) {
return back(err);
}
//读取posts集合
db.collection('posts', function (err, collection) {
if (err) {
mongodb.close();
return back(err);
}
//根据条件查找对应的对象
collection.find({"_id":ObjectId(id)}).toArray(function (err, docs) {
console.log(ObjectId(id));
mongodb.close();
if (err) {
return back(err); //失败返回err
}
console.log(typeof(docs));
console.log(docs);
back(null, docs);
});
});
}); } Comment.prototype.add = function(id, callback) {
//存储时间
var date = new Date();
var time = {
minute: date.getFullYear() + "-"+ (date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" +
date.getMinutes()
+ ":" + date.getSeconds()
}
//!!!!!!!!!先定义个一个floor变量,以便后面的函数对其返回值
var commentArray = [];
console.log(commentArray)
//调用前面定义的查找comments数组的函数。
var commentArray = commentFloor(id, function(err, docs) {
if (err) {
commentArray = []
}
console.log(docs);
return docs;
} );
// commentArray = docs[0].comments;
console.log(commentArray);
**此处的commentArray输出为undefined。不知为何**
var floor = commentArray.comments.length;
console.log(floor);
//要存入数据库的文档
var comment = {
name: this.name,
head: this.head,
time: time,
comment: this.comment,
floor: floor
};
//打开数据库
mongodb.open(function (err, db) {
if (err) {
return callback(err);
}
//读取posts集合
db.collection('posts', function(err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
//根据_id为查询条件更改文章
collection.update({"_id":ObjectId(id)}, {
//comments为数组形式,可以直接用push来添加项
$push: {'comments': comment}
} , function (err) {
mongodb.close() ;
if (err) {
return callback(err);
}
callback(null); // err返回null
});
});
}); };
这个问题已经忙活了一天了,各种查资料,没方法,只有向大家求助了,谢谢!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
var commentArray = [];
console.log(commentArray)
//这里输出肯定是空
// var commentArray = commentFloor(id, function(err, docs) {//注意:你重新声明了变量commentArray
// if (err) {
// commentArray = []
// }
// //在这个里面你想把回调的值赋给commentArray
// //docs是个数组,是因为你commentFloor回调返回的就是数组
// console.log(docs);
// return docs;
// } );
console.log(commentArray);//这里之所以undefined,是因为被注释的这一段(上面)是异步执行的,输出语句会先于你的异步回调结果出来之前输出,
//那么就是输出commentArray这个变量,这个变量你重新声明了,又没拿到赋值,所以就是undefined