mongoose连接到副本集

我试图通过mongoose连接到MongoDB副本。 我用这个链接 。
configurationjson:

"mongoose": { "uri": "mongodb://localhost:27022/chat,localhost:27021,localhost:27020", "options": { "replset": { "rs_name": "rs0" }, "server": { "poolSize": 3, "socketOptions": { "keepAlive": 1 } } } } 

mongoose连接:

 var mongoose = require('mongoose'); mongoose.connect(config.get('mongoose:uri'), config.get('mongoose:options')); 

而启动应用程序后,我得到了exception:

 Error: host must be specified [undefined] at new exports.ConnectionPool (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\mongodb\lib\mongodb\connection\connection_pool.js:18:11) at Server.connect (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\mongodb\lib\mongodb\connection\server.js:335:25) at Db.open (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\mongodb\lib\mongodb\db.js:264:23) at MongoStore._open_database (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect-mongo\lib\connect-mongo.js:174:15) at MongoStore._get_collection (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect-mongo\lib\connect-mongo.js:169:14) at MongoStore.get (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect-mongo\lib\connect-mongo.js:213:10) at Object.session [as handle] (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect\node_modules\express-session\index.js:215:11) at next (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect\lib\proto.js:194:15) at Object.module.exports [as handle] (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\middleware\resExtensions.js:21:2) at next (c:\Users\lor1an\Downloads\prj_chat-master\prj_chat-master\node_modules\connect\lib\proto.js:194:15) 

Db:聊天,主服务器:localhost:27022。

另外我试着删除另外两台服务器(只保留configurationjson中的主服务器),我看到它知道二级服务器(我用日志)。 我认为这是关于mongodb元数据。 但是,当我closures主要的一个,它完成了它的工作(难怪),我需要它,所以它可以使用次要的。
有任何想法吗?

我们使用这个:

 if(config.db.indexOf('replicaSet') > - 1) { dbOptions = { db: {native_parser: true}, replset: { auto_reconnect:false, poolSize: 10, socketOptions: { keepAlive: 1000, connectTimeoutMS: 30000 } }, server: { poolSize: 5, socketOptions: { keepAlive: 1000, connectTimeoutMS: 30000 } } }; } var db = mongoose.connect(config.db, dbOptions); 

哪里

 config.db = 'mongodb://USER:PW@host1:port1,host2:port2/DBNAME?replicaSet=RSNAME' 

根据http://bites.goodeggs.com/posts/reconnecting-to-mongodb-when-mongoose-connect-fails-at-startupclosuresAuto_reconnect

我也遇到了麻烦。 我从经验中学到的是:

只有在连接URI包含单个非群集连接(又称单个连接string)时,才会调用“服务器”块。

仅当连接URL包含逗号分隔的连接string(又名复制集)列表时,才会调用“replset”块。

 var options = { db: { native_parser: true }, // This block gets run for a non replica set connection string (eg. localhost with a single DB) server: { poolSize: 5, reconnectTries: Number.MAX_VALUE, ssl: false, sslValidate: false, socketOptions: { keepAlive: 1000, connectTimeoutMS: 30000 } }, // This block gets run when the connection string indicates a replica set (comma seperated connections) replset: { auto_reconnect: false, poolSize: 10, connectWithNoPrimary: true, ssl: true, sslValidate: false, socketOptions: { keepAlive: 1000, connectTimeoutMS: 30000 } } }; 

这个块在localhost和生产env上工作。 希望能帮助到你。

您的连接string可能无效。 您应该为每个副本集成员提供URI:

“uri”:“mongodb:// localhost:27022 / chat,localhost:27021,localhost:27020”

您应该在Mongoose文档中检查副本集连接部分。