Mongodb 如何在客户端等待,直到服务器端的mongo连接就绪?
我的meteor服务器和远程mongodb实例之间的连接有点慢。我是否可以在客户端等待,在服务器未建立到mongo的连接之前不注册订阅?执行此操作的一种基本方法是使用Meteor.autorun侦听Meteor.userId()中的更改。如果您能够获得此信息,您将知道您已连接到MongoDB。如果您没有处理身份验证,那么您可以在服务器端创建一个从MongoDB返回内容的方法。当它返回某些内容时,在客户端成功后,您可以启动所有订阅。最可靠的方法是通过Meteor.call调用。如果以同步调用(无回调)的方式执行此操作,则客户端将等待调用完成。以下是如何异步执行此操作:Mongodb 如何在客户端等待,直到服务器端的mongo连接就绪?,mongodb,meteor,Mongodb,Meteor,我的meteor服务器和远程mongodb实例之间的连接有点慢。我是否可以在客户端等待,在服务器未建立到mongo的连接之前不注册订阅?执行此操作的一种基本方法是使用Meteor.autorun侦听Meteor.userId()中的更改。如果您能够获得此信息,您将知道您已连接到MongoDB。如果您没有处理身份验证,那么您可以在服务器端创建一个从MongoDB返回内容的方法。当它返回某些内容时,在客户端成功后,您可以启动所有订阅。最可靠的方法是通过Meteor.call调用。如果以同步调用(无回
Meteor.call('isEverythingReady', param1,
function(error, result) {
if (error === undefined) {
Meteor.subscribe("mystuff");
Session.set("sess1", "whatever");
} else {
alert("There was an error during startup.");
}
});
然后
if (Meteor.isServer) {
Meteor.methods( {
isEverythingReady: function(param1) {
// can you connect to database?
return true;
}
}
}
我在Meteor的一个项目中也遇到了同样的问题,当我翻阅他们的文档并找到解决方法时,这个答案确实奏效了。但是,您可能应该列出如何使函数(将编辑添加到您的答案中)不确定我是否理解您的注释-回调函数显示在上面的代码段中。是的,但是要调用的函数没有列出如何创建它,当我最初尝试此操作时,我尝试创建一个默认函数x(),而不是meteor.methods()。至于评论中的问题,是的,您可以通过这种方式连接到数据库。您有一个输入错误:
isEverythingReady:function(param1)
中缺少y
。愚蠢的规则需要至少6个字符的差异,我才能编辑答案。如果你有更新,你应该编辑你的问题。是的,这是最有用和最简单的方法。应该有更好的方法检查Mongo就绪性,但我认为它现在不在Meteor的优先列表上。