我正在开发一个具有 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
中定义呢?任何见解将不胜感激。
最佳答案
当您调用riderClass.findByCarpoolDriver
时,您传入的回调函数需要两个参数:
function(error, riders) {
console.log(riders); //undefined
res.send(riders);
}
但在调用回调
的两个地方,您只传递一个参数。由于您不使用错误参数,因此您可能希望将该回调函数更改为:
function(riders) {
console.log(riders); //undefined
res.send(riders);
}
但是你会想要删除/更改这一行:
if( error ) callback(error)
因为回调从未使用错误
开始。
关于javascript - 当查询返回对象时,Express Mongo 回调返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20253915/