javascript - 当查询返回对象时,Express Mongo 回调返回未定义

标签 javascript node.js mongodb asynchronous express

我正在开发一个具有 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/

相关文章:

node.js - 主机 header 可以像 Apache 中那样解析为虚拟主机 node.js 吗?

ruby-on-rails - MongoDB Schema Design --- 与团体的友谊

node.js - 生成 mongoinsert

node.js - Mongoose 更新子文档(如果存在)

javascript - 什么都没做时点击了取消按钮

node.js - 如何将资源或模板文件包含在 npm 包中,然后将它们加载到 Node 中?

javascript - 在复选框中设置选中值的最大值

node.js - 以 Node 兼容的方式编码 md5

javascript - jQuery 动画持续时间就像延迟一样

javascript - 计算选中的复选框和文本区域的问题