2013-02-07 25 views
3

我试图打印到控制台在我的数据库团队的名称方法“的toString”,这里是代码:的NodeJS猫鼬 - 无法调用未定义

var Team = require('../schemas/Team').Model; 
app.get('/match', function(req, res) { 
    var key = 1359407087999; // Team Key 
    Team.findByKey(key, function(err, team) { 
     util.log(team); 
     if (err) { 
      util.log("Error occured"); 
     } 
     if (!team) { 
      util.log("The team does not exist"); 
     } else { 
      res.send("Found team: " + team.name); 
     } 
    }); 
}); 

的代码获得团队成功其中util.log(team)是。它打印到控制台:

{ 
    __v: 0, 
    _id: 5106e7ef9afe3a430e000007, 
    name: 'Team Name', 
    key: 1359407087999 
} 

这也适用于将它发送到网页时。

但是当我尝试球队的名称发送到网页,我得到与res.send方法=>Found team: undefined以下输出...当我尝试输出team.name而不是team到控制台,我得到的错误Cannot call method 'toString' of undefined

这里是我的团队猫鼬的架构,以及:

var Team = new Schema({ 
    'key' : { 
     unique : true, 
     type : Number, 
     default: getId 
    }, 
    'name' : { type : String, 
     validate : [validatePresenceOf, 'Team name is required'], 
     index : { unique : true } 
    } 
}); 

Team.statics.findByKey = function(key, cb){ 
    return this.find({'key' : key}, cb); 
}; 

module.exports.Schema = Team; 
module.exports.Model = mongoose.model('Team', Team); 

表演队

app.get('/show/team/:key', function(req, res){ 
    util.log('Serving request for url[GET] ' + req.route.path); 
    Team.findByKey(req.params.key, function(err, teamData){ 
     util.log(teamData[0]); 
     if (!err && teamData) { 
      teamData = teamData[0]; 
      res.json({ 
       'retStatus' : 'success', 
       'teamData' : teamData 
      }); 
     } else { 
      util.log('Error in fetching Team by key : ' + req.params.key); 
      res.json({ 
       'retStatus' : 'failure', 
       'msg' : 'Error in fetching Team by key ' + req.params.key 
      }); 
     } 
    }); 
}); 

回答

2

名称是唯一的,所以您应该使用findOne而不是find

Team.statics.findByKey = function(key, cb){ 
    return this.findOne({'key' : key}, cb); 
}; 
+0

感谢这工作。 – germainelol

+0

这已经破坏了我原来的帖子中的其他代码,你有什么想法吗?随着发现它的作品,但与findOne它现在不起作用... – germainelol

+1

删除[0]的两个发生。 – Charles