1

我的配置如下,我的 MongoDB 不需要用户名或密码:

mongo: {
    module: 'sails-mongo',
    url: "mongodb://127.0.0.1:27017/mydb",
    replSet: {
        servers: [
            {
                host: "127.0.0.1",
                port : 27018
            },
            {
                host: "127.0.0.1",
                port : 27019
            }
        ],
        options: {connectWithNoPrimary:true, rs_name:"rs0"}
    }      
}

它工作正常,这意味着我没有收到连接错误,我可以进行查询。但是当我关闭 127.0.0.1:27017 时,127.0.0.1:27018 变成了 PRIMARY,就好像我做了一个 rs.status()。在此之后,我不再能够进行任何查询并继续获得以下信息:

错误:没有打开的连接

我确信我在本地机器中正确设置了副本集,因为我使用 MongoDB 本机驱动程序来测试上述场景(将 PRIMARY 和 SECONDARY 接管为 PRIMARY)并且没有问题。

var url = 'mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb?w=0&wtimeoutMS=5000&replicaSet=sg1&readPreference=secondary';

mongodb.MongoClient.connect(url, function(err, result) {
    if(err || result === undefined || result === null) {
          throw err;
    } else {
          db = result;  
    } 
});
4

1 回答 1

1

好的,我找到了答案。由于 session.js 发出此消息。我评论了文件中的所有内容,现在它正在工作。我猜的原因是在 session.js 中,它只指向一个主机,这是原始的 PRIMARY。当你关闭这个 mongodb PRIMARY 时,session.js 不再可以连接,所以它抛出了异常。我还通过在副本集中(mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb)中输入主机 ip 在 session.js 中尝试了 mongodb URL 字符串,但未能“帆升降机”。当只放置一个主机时就可以了。

现在如果我需要存储会话信息,我需要启动另一个 mongodb 实例,然后 session.js 指向这个新的瞬间。

于 2014-06-06T13:40:50.303 回答