Node.js Object [object Object]没有方法错误

时间:2015-09-13 13:46:56

标签: javascript node.js

我正在为我的应用程序使用Express.js,为数据库使用mongodb(也是mongodb Nativ驱动程序)。

我创建了一个包含两个函数的模型,用于获取帖子和评论:

// Get single Post
exports.posts = function(id,callback){

    MongoClient.connect(url, function (err, db) {
      if (err) {
        console.log('Unable to connect to the mongoDB server. Error:', err);
      } else {

        console.log('Connection established to', url);

        var collection = db.collection('posts');

        collection.find({psotId:id}).limit(1).toArray(function (err, result) {
          if (err) {
            return callback(new Error("An error has occured"));
          } else {
            callback(null,result);
          }
          db.close();
        });
      }
    });

}

// Get post comments
exports.comments = function(id,callback){

    MongoClient.connect(url, function (err, db) {
      if (err) {
        console.log('Unable to connect to the mongoDB server. Error:', err);
      } else {      
        console.log('Connection established to', url);
        var collection = db.collection('comments');
        collection.find({postId:id}).toArray(function (err, result) {
          if (err) {
            return callback(new Error("An error has occured"));
          } 
          else {        
            callback(null,result);
          }
          db.close();
        });
      }
    });

}

我创建了一条显示单一帖子的路线:

var post = require('../models/post');
 //Get single post
router.get('/post/:postId',function(req,res, next){

    var id = parseInt(req.params.postId);
    post.posts(id,function(err,post){
        if(err){
            console.log(err)
        }else{
            post.comments(post[0].id,function(err,comments){
                if(err){
                    console.log(err)
                }
                else{
                    res.render('blogPost',{post:post,comments:comments})
                }
            })
        }
    })

})

当我运行此代码时,我收到此错误:

TypeError: Object [object Object] has no method 'comments'

当我单独使用这两个功能时,它的工作正常:

我是这样的意思:

var post = require('../models/post');
 //Get single post
router.get('/post/:postId',function(req,res, next){

    var id = parseInt(req.params.postId);
    post.posts(id,function(err,post){
        if(err){
            console.log(err)
        }else{
           res.render('blogPost',{post:post})   
        }
    })

})





     //Get post comments
router.get('/post/1',function(req,res, next){

    post.comments(1,function(err,comments){
        if(err){
            console.log(err)
        }else{
           res.render('blogPost',{comments:comments})   
        }
    })

})

但当我使用post.comments作为post.posts的回调时,我收到错误。

我想知道为什么会这样吗?经过一些研究,我无法找到解决方案而且我感到困惑。

1 个答案:

答案 0 :(得分:0)

如果你从源码中复制粘贴它,那么因为你拼错了方法。

post.commencts

应该是

post.comments