Nodejs未定义的变量

时间:2013-09-03 01:08:59

标签: node.js mongodb express

我有一个空的数据库,我得到TypeError:无法读取未定义的属性'id'

我不确定如何检查未定义的变量,或者即使此检查应该在db模型中

快速路线

    app.all("/", function(req, res){  
      if(!req.isAuthenticated()) req.user = null;    
      Bid.findHighestBids(function(err, bids){
        if(err) throw err;
        User.findHighestBidder(bids[0].id, bids[0].amount, function(err, highest){
          if(err) throw err;
          highest.amount = bids[0].amount;  
          res.render("home", {user: req.user, bids: req.bids, highest: highest}); 
        });      
      });
    });

模型中的片段,(没有数据,所以它没有返回任何内容,这就是问题)

    BidSchema.statics.findHighestBids = function(done){
      var Bids = this; 
      var num = 5;  
      this.find()
      .sort('-amount')
      .limit(num)
      .exec(function(err,bids){
        if(err) throw err;
        done(null, bids);
      });   
    }

    UserSchema.statics.findHighestBidder = function(id, amount, done){
      var User = this; 
      this.findOne({ 'facebook.id' : id }, function(err, highest){
        if(err) throw err;
        if(!id) return done(null, highest);
        done(null, highest);
      });  
    }

1 个答案:

答案 0 :(得分:3)

在访问第一个元素之前,您没有检查bids是否包含任何元素。既然你说你没有数据,那可能是你的问题:

Bid.findHighestBids(function(err, bids){
  if(err) throw err;
  User.findHighestBidder(bids[0].id, bids[0].amount, function(err, highest){
  ...

bids[0]返回undefined,其中没有id属性,因此返回错误。

所以做这样的事情:

Bid.findHighestBids(function(err, bids){
  if (err) throw err;
  if (bids.length) {
    User.findHighestBidder(bids[0].id, bids[0].amount, function(err, highest){
      if(err) throw err;
      highest.amount = bids[0].amount;  
      res.render("home", {user: req.user, bids: req.bids, highest: highest}); 
    });      
  } else {
    res.render(... whatever you need for the no bids case ...);
  }