【问题标题】:Callback function never called after Mongoose query is executed执行 Mongoose 查询后从未调用过回调函数
【发布时间】:2014-03-20 14:01:03
【问题描述】:

以下是我的代码:

mongoose.connect('mongodb://localhost/mydatabase');
  var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  console.log('DB connection opened');
});
// ...
var dbCallback = function(err, body) {
  // ...
};
// ...
var StuffModel = mongoose.model('Stuff', StuffSchema);
StuffModel.find({}).exec(dbCallback);

永远不会调用dbCallback 函数。任何帮助将不胜感激!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您是否尝试过在数据库连接打开之后进行查询?我没有 Mongoose 服务器来测试它,但这是我的第一个猜测。

    var Stuff = mongoose.model('Stuff', StuffSchema);
    
    db.once('open', function () {
      Stuff.find({}, function (e, body) {
        console.log('It worked!');
      });
    });
    

    对不起,如果这不能解决它。

    【讨论】:

    • 数据库连接打开后查询正在运行,但我会检查从 db 回调内部查询是否会改变任何内容。
    【解决方案2】:

    确保您实际连接到 Mongo 实例,否则查询将挂起,并且通常不会抛出或返回错误。我的 Mongo URI 中的一个错误导致了这个问题。

    在您的代码中,您将 Mongo URI 设置为 mongodb://localhost/mydatabase。我想这可能是不正确的,是你的问题的原因。将您的 URI 更改为 localhost:27017,这是 Mongo 设置为运行的默认端口。

    【讨论】:

    • 这真的很有帮助。如果您的 mongo uri 有问题,您不会从 mongoose.connect() 得到任何响应或错误
    【解决方案3】:

    我遇到了类似的问题。

    我在查询后调用process.exit(0),所以应用程序在猫鼬有机会运行回调之前退出。

    所以我删除了process.exit(0),它成功了!

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 2014-06-20
      • 2018-04-03
      • 2014-03-21
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2022-11-09
      相关资源
      最近更新 更多