2015-05-29 60 views
0

我正在开发使用Nodejs和Mongodb和猫鼬的应用程序。用户和订阅是2猫鼬模式。我想从订阅集合中获取每个成员的过期日期,并将它与每个成员对象数组一起包含在内。但它不起作用。类型错误无法设置属性未定义

var UserSchema = new Schema({ 
    title: { 
     type: String 
    }, 
    firstName: { 
     type: String 
    }, 
    lastName: { 
     type: String 
    }, 
    displayName: { 
     type: String 
    }, 

}); 

var SubscriptionSchema = new Schema({ 
    member_id: { 
     type: Schema.ObjectId, 
     ref: 'User' 
}, 
    renewal_date: { 
     type: Date 
    }, 
    expire_date: { 
     type: Date 

    }, 

    amount: { 
     type: String 
    }, 
    paid_mode: { 
     type: String 
    }, 

}); 





exports.memberlist = function(req, res) { 
    var expire=''; 

    user.find({}).lean().exec(function(err, collection) { 



      var i; 
      for(i=0;i<collection.length; i++) 
      { 



       Subscriptions.find({'member_id':collection[i]._id}).lean().exec(function(err, subs){ 

        if(subs.length > 0) 
         { 

          expire = subs[0].expire_date || ''; 
         collection[i].expire_date = 'expire'; 

         } 


        }); 


      } 


     res.send(collection); 

    }); 

}; 

回答

1

这是控制流问题。你应该使用类似这样

var async = require('async'); 

// ... 

exports.memberlist = function(req, res) { 
    var expire=''; 

    user.find({}).lean().exec(function(err, collection) { 

     async.eachSeries(collection, function(item, cb){ 
      Subscriptions.find({'member_id':item._id}).lean().exec(function(err, subs){ 

       if(subs.length > 0) 
        { 

         expire = subs[0].expire_date || ''; 
         collection[i].expire_date = 'expire'; 
         cb() 
        } 


       }); 


     }, function(){ 
      res.send(collection); 
     }); 
    }); 
}; 

阅读here有关节点控制流程,并here约异步模块。

+0

工作。谢谢你的回答.. –

相关问题