Mongoose Model.find()在未连接到数据库时挂起

Mar*_*ark 10 mongoose mongodb node.js

我正在经历一些错误情况,试图了解如何处理这些情况.

在没有数据库连接的情况下,Mongoose Model.find(...)调用似乎挂起.下面是示例代码.我会假设使用err对象调用回调,但事实并非如此.

如何防止模型调用挂起?readyState每次访问模型时,是否需要手动检查?

// app.js
// Let's use a non-existing host so connecting fails:
// (callback is invoked with err object)
mongoose.connect('mongodb://localhostXXX/blog', function(err){ ... });

BlogPost  = mongoose.model('BlogPost', BlogPostSchema);

// api.js
exports.list_posts = function(req, res) {

    // Ready state is '0' = disconnected (since we used a wrong hostname)   
    console.log('DB ready state: ' + BlogPost.db.readyState);

    // This will not invoke the callback:
    BlogPost.find(function(err, threads) {
        // Never called...
    });
 }
Run Code Online (Sandbox Code Playgroud)

bFu*_*unc 6

这不是答案,但希望它能帮助您找到解决方案. 使用护照模块时与mongoose.createConnection有非常相似的问题 ,发现mongoose.connect工作正常

  • 如果可以的话,我会给它+100.我一直试图解决这个问题几个小时. (2认同)

rdr*_*rey 4

由于您已经在连接调用中使用了错误处理程序,因此明智的做法是在数据库未启动时退出您的应用程序,或者激活一些以漂亮的500 Internal Server Error.

Mongoosenode-mongodb-native在底层使用 mongodb 连接,您可能会在其中找到其他有用的连接选项。:)

编辑:尝试设置socketOptions.socketTimeoutMS. 显然没有设置默认超时。请参阅http://mongodb.github.com/node-mongodb-native/api- generated/server.html 。

我的工作机器上没有节点来为您尝试确切的语法,但您可能必须使用mongoose.Connection,它有一个open()接受选项传递到 的方法node-mongodb-native。我不认为mongoose.connect()接受这些选择,但我可能是错的。