我有一个NodeJS应用程序,我需要连接到MongoDB数据库 - 一个是单个服务器设置,另一个是副本集。我连接到下一个就好了,但是当连接到第二个时 - 我收到以下错误:
/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/db.js:299
throw err;
^
TypeError: Cannot set property 'auto_reconnect' of undefined
at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:110:35
at Array.forEach (native)
at Options.decorateAndClean (/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:108:16)
at new exports.ReplSet (/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js:84:31)
at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/mongo_client.js:320:30
at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/db.js:296:11
at process._tickDomainCallback (node.js:459:13)
我用来连接的代码(省略用户名和真实网址后)是:
require('mongodb').MongoClient.connect("mongodb://password@url1:port1,url2:port2/dbName?replicaSet=setName&w=0&readPreference=secondary", function(err, doc) {...});
现在当我单独尝试这个时(不是在连接到真正的其他数据库的代码之后),我工作得很好......有什么想法吗?
答案 0 :(得分:2)
这个花了我一分钟才弄明白。该错误表示问题出在./node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:110
问题是options.js:91
创建了一个空对象。他们正在这样做一个字典并对服务器的'host:port'字符串进行重复数据删除。 options.js:104
遍历该字典中的键并盲目地将它们加载到数组中。如果您在全局中向Object.prototype添加了一些内容,那么这将是一个问题,因为它也会被添加到最终的服务器阵列中。因为你添加到Object.prototype的任何东西可能都不是服务器,它不会有一个options属性,你会收到这个错误。
解决方法: 找出你的代码在哪里修改了Object.prototype并使其不那么通用。我认为他们已经在更新版本的驱动程序中更新了这个,但是如果你使用旧版本,你需要解决它。