【发布时间】:2013-11-27 22:00:28
【问题描述】:
我正在开发一个包含 MongoDB 的 Node/Express 项目,但是在将 Mongo 查询回调的结果传递给我的 app.js 文件中的路由时遇到问题。
在我的 MongoDB 设置文件中,我有以下方法可以访问两个集合并返回一个骑手数组:
RiderClass.prototype.findByCarpoolDriver = function(driverID, callback) {
this.getCollection(function(error, rider_collection) { //returns db.riders
if( error ) callback(error)
else {
carpoolClass.findRidesForDriver(driverID, function(err, carpools){
var rider_ids = [];
for(var ii=0;ii<carpools.length;ii++){
rider_ids.push(new ObjectID(carpools[ii].rider_id));
}
rider_collection.find( {_id:{$in : rider_ids}}).toArray(function(e, riders){
console.log(riders); //prints out fine
callback(riders);
});
});
}
});
};
问题出现在我的app.js 文件中,当我调用路由时:
var RiderClass = require('./rider_class').RiderClass;
var riderClass = new RiderClass('localhost', 27017);
app.get('/driver/:id/rides', function(req, res) {
riderClass.findByCarpoolDriver(req.params.id, function(error, riders) {
console.log(riders); //undefined
res.send(riders);
});
});
我的 Mongo 文件中的 console.log(riders) 按我的预期打印数组,但我的 app.js 文件中的 console.log(riders) 返回一个未定义的。而且我不认为这是一个异步问题,因为 mongo 日志是在未定义的 app.js 之前打印的。
我唯一能想到的可能是查询多个集合有问题?但即便如此,我也可以从记录中看到传递给callback() 的数组很好,那么为什么它不在app.js 中定义?任何见解将不胜感激。
【问题讨论】:
标签: javascript node.js mongodb asynchronous express