TypeError: Cannot read property 'comments' of undefined

发布于 2022-09-04 18:02:57 字数 3005 浏览 8 评论 0

数据结构为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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦亿 2022-09-11 18:02:57

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文